zoukankan      html  css  js  c++  java
  • SQL批量更新操作[转载]

    之前有提過一個方式來批量更新DB的資料,就是利用分隔符號把所有資料合併成單一字串,然後傳送此字串給SQL Server去轉換成表格做進階運用,今天就來看一下該如何利用此方式。

    首先建立一個方法(Method)把要批量更新的資料組合成一個字串,你可以建立屬於自己的方法,這邊我用下面的範例說明。

    01 public static string JoinList<T>(string delimiter, IEnumerable<T> items, Converter<T, string> converter)
    02 {
    03     StringBuilder builder = new StringBuilder();
    04     foreach (T item in items)
    05     {
    06         builder.Append(converter(item));
    07         builder.Append(delimiter);
    08     }

    09     if (builder.Length > 0)
    10         builder.Length = builder.Length - delimiter.Length;
    11
    12     return builder.ToString();
    13 }

    此方法可以接受不同的資料型態然後轉成字串輸出,其使用方法如下:

    List<int> lstCustomerID = new List<int> { 1001, 1002, 1003, 1004 };
    //使用","作為分隔字元,輸入的資料型態為int
    string strParameter = JoinList<int>(",", lstCustomerID, delegate(int item) { return item.ToString(); });

    幫然也可以輸入其他的資料型態如下

    //一樣建立一個List<Guid>物件
    List<Guid> lstCustomerID = new List<Guid> { guid1, guid2, ... };
    //使用","作為分隔字元,輸入的資料型態為Guid
    string strParameter = JoinList<Guid>(",", lstCustomerID, delegate(Guid item) { return item.ToString(); });

    此字串內容會是這樣

    1001,1002,1003,1004

    將此字串送入後端的SQL資料庫後,資料庫需要有function把此字串轉成資料表以利運用,下面是一個範例如何將此類字串轉成table。

    01 CREATE FUNCTION dbo.fxnParseCommaDelmitedList
    02 (
    03 @CommaDelimitedList varchar(8000)
    04 )
    05 RETURNS @TableVar TABLE (ItemID int NOT NULL )
    06 AS
    07 BEGIN
    08  DECLARE @IDListPosition int
    09  DECLARE @IDList varchar(4000)
    10  DECLARE @ArrValue varchar(4000)
    11  SET @IDList = COALESCE(@CommaDelimitedList, '')
    12  IF @IDList <> ''
    13  BEGIN
    14  --先在字串最後補上一個','
    15  SET @IDList = @IDList + ','
    16  WHILE PATINDEX('%,%' , @IDList ) <> 0
    17      BEGIN
    18    SELECT @IDListPosition = PATINDEX('%,%' , @IDList)
    19    SELECT @ArrValue = LEFT(@IDList, @IDListPosition - 1)
    20    --將分割後的數值存入@TableVar
    21    INSERT INTO @TableVar (ItemID) VALUES (CONVERT(int, @ArrValue))
    22    --將已經處理過的字串移除
    23    SELECT @IDList = STUFF(@IDList, 1, @IDListPosition, '')
    24      END
    25  END
    26  RETURN
    27 END

    建立上面這個function並放在Table-Valued的資料夾下即可。

    使用方式:

    Select *
    From dbo.fxnParseCommaDelmitedList(@parameter)

    就會得到如下的表格

    ItemID
    1001
    1002
    1003
    1004
    原文:http://www.dotblogs.com.tw/kennyshu/archive/2009/07/12/9449.aspx
  • 相关阅读:
    深入学习Make命令和Makefile(上)
    make命令
    ubuntu 重启网络方法--通过杀死进程重启网络
    悟空遥控器 --- 手机投屏到电视 播放视频
    组织结构图 --- 商务
    软件和数据库
    因果图---鱼骨图
    流程图 --- BPMN规范简介
    异次元软件
    Free Download Manager (FDM) 中文版
  • 原文地址:https://www.cnblogs.com/guanjie20/p/1885532.html
Copyright © 2011-2022 走看看