之前有提過一個方式來批量更新DB的資料,就是利用分隔符號把所有資料合併成單一字串,然後傳送此字串給SQL Server去轉換成表格做進階運用,今天就來看一下該如何利用此方式。
首先建立一個方法(Method)把要批量更新的資料組合成一個字串,你可以建立屬於自己的方法,這邊我用下面的範例說明。
1
public
static
string JoinList<T>(
string delimiter, IEnumerable<T> items, Converter<T,
string> converter)
0
2
…
{
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 }
此方法可以接受不同的資料型態然後轉成字串輸出,其使用方法如下:
int> lstCustomerID =
new List<
int> { 1001, 1002, 1003, 1004 };
//使用”,”作為分隔字元,輸入的資料型態為int
string strParameter = JoinList<
int>(
“,”, lstCustomerID,
delegate(
int item)
…
{ return item.ToString(); });
幫然也可以輸入其他的資料型態如下
List<Guid> lstCustomerID =
new List<Guid>
…
{ guid1, guid2, … };
//使用”,”作為分隔字元,輸入的資料型態為Guid
string strParameter = JoinList<Guid>(
“,”, lstCustomerID,
delegate(Guid item)
…
{ return item.ToString(); });
此字串內容會是這樣
將此字串送入後端的SQL資料庫後,資料庫需要有function把此字串轉成資料表以利運用,下面是一個範例如何將此類字串轉成table。
1
CREATE FUNCTION dbo.fxnParseCommaDelmitedList
0
2 (
0
3 @CommaDelimitedList
varchar(8000)
0
4 )
0
5 RETURNS @TableVar
TABLE (ItemID
int
NOT
NULL )
0
6
AS
0
7
BEGIN
0
8
DECLARE @IDListPosition
int
0
9
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的資料夾下即可。
使用方式:
From dbo.fxnParseCommaDelmitedList(@parameter)
就會得到如下的表格
ItemID |
1001 |
1002 |
1003 |
1004 |
原文:
http://www.dotblogs.com.tw/kennyshu/archive/2009/07/12/9449.aspx
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/110690.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...