SQL批量更新操作[转载]

SQL批量更新操作[转载]

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

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

0
1
SQL批量更新操作[转载]
public
static
string JoinList<T>(
string delimiter, IEnumerable<T> items, Converter<T,
string> converter)


0
2
SQL批量更新操作[转载]
SQL批量更新操作[转载]
…
{

03 SQL批量更新操作[转载]    StringBuilder builder = new StringBuilder();
04 SQL批量更新操作[转载]    foreach (T item in items)
05 SQL批量更新操作[转载]SQL批量更新操作[转载]    …{

06 SQL批量更新操作[转载]        builder.Append(converter(item));
07 SQL批量更新操作[转载]        builder.Append(delimiter);
08 SQL批量更新操作[转载]    }

09 SQL批量更新操作[转载]    if (builder.Length > 0)
10 SQL批量更新操作[转载]        builder.Length = builder.Length – delimiter.Length;
11 SQL批量更新操作[转载]
12     return builder.ToString();
13 SQL批量更新操作[转载]}

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

List<
int> lstCustomerID =
new List<
int> { 1001, 1002, 1003, 1004 };


//使用”,”作為分隔字元,輸入的資料型態為int


SQL批量更新操作[转载]
string strParameter = JoinList<
int>(
“,”, lstCustomerID,
delegate(
int item)
…
{ return item.ToString(); });

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

//一樣建立一個List<Guid>物件


SQL批量更新操作[转载]List<Guid> lstCustomerID =
new List<Guid>
…
{ guid1, guid2, … };


//使用”,”作為分隔字元,輸入的資料型態為Guid


SQL批量更新操作[转载]
string strParameter = JoinList<Guid>(
“,”, lstCustomerID,
delegate(Guid item)
…
{ return item.ToString(); });

此字串內容會是這樣

1001,1002,1003,1004

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

0
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的資料夾下即可。

使用方式:

Select *


From dbo.fxnParseCommaDelmitedList(@parameter)

就會得到如下的表格

ItemID
1001
1002
1003
1004

原文:
http://www.dotblogs.com.tw/kennyshu/archive/2009/07/12/9449.aspx

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110690.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c语言oj平台作业,OJ平台C语言习题答案.pdf

    c语言oj平台作业,OJ平台C语言习题答案.pdfOJ平台C语言习题答案return0;}★★★★★★★★★★用指针编写一个程序,输入字符串后,统计其中各种字符的个数,输出其中大小编写一个函数,功能是使输入的字符串逆序输出。…

    2022年6月23日
  • JS查找数组中是否包含某个元素或对象「建议收藏」

    JS查找数组中是否包含某个元素或对象「建议收藏」做业务需求时遇到一个功能模块需要动态增删数组对象,需求本身完成不难,但是写出来的代码我总感觉很冗余,于是我在网上找了很久,看有没有现成的轮子可以使用,最终找到了es6中的一个方法将其记录在此,方便以后自己翻阅查找对数组元素进行增删//e是你要判断是否在这个数组里的元素letarr=[‘1′,’2′,’3′,’4’]letarrIndex=arr.indexOf(e)i…

    2022年10月18日
  • linux安装yarn

    linux安装yarn这里介绍使用yum的方式:先要安装node.js,用node-v可以查看是否安装了node。1、添加yarn仓库wgethttps://dl.yarnpkg.com/rpm/yarn.repo-O/etc/yum.repos.d/yarn.repo2、安装yarnyum-yinstallyarn安装完成后,yarn-v可以查看版本。…

    2022年5月9日
  • Perl正则表达式详解[通俗易懂]

    Perl正则表达式详解[通俗易懂]Perl中的正则表达式使用示例m//修饰符LVALUE=~m/PATTERN/;LVALUE=~/PATTERN/;修饰符含义/i匹配时忽略大小写/g全局匹配,默认情况下,正则表达式”abc”匹配”abcdabc”字符串的时候,将之匹配左边的abc,使用g将匹配两个”abc”/c在开启g的情况下,如果匹配失败,将不重置搜索位置/m多行匹配模式/s让.可以匹配换行符”\n”,也就是说该修饰符让.真的可以匹配任意字符/x允许正则表达

    2022年5月31日
  • 看这里!2021年Java开发突破20k有哪些有效的路径?绝对干货[通俗易懂]

    看这里!2021年Java开发突破20k有哪些有效的路径?绝对干货[通俗易懂]前言微服务是近年来备受关注的话题,相比于传统的SOA而言,更容易理解,也更容易实践,它将“面向服务”的思想做得更加彻底。有人说它非常好,但就是“玩不起”,why?微服务是一种分布式系统架构,它建议我们将业务切分为更加细粒度的服务,并使每个服务的责任单一且可独立部署,服务内部高内聚,隐含内部细节,服务之间低耦合,彼此相互隔离。此外,我们根据面向服务的业务领域来建模,对外提供统一的API接口。微服务的思想不只是停留在开发阶段,它贯穿于设计、开发、测试、部署、运维等软件生命周期阶段。可见,我们提到的微服务,

    2022年7月8日
  • tar 分割压缩

    tar 分割压缩1、普通tar压缩命令tar-zcvfcm-11.tar.gzcm-11//将cm-11文件夹压缩成cm-11.tar.gz2、压缩后的文件太大,需要将cm-11.tar.gz分割成N个指定大小的文件,怎么办?一条命令搞定split-b4000M-d-a1cm-11.tar.gzcm-11.tar.gz.//使用split

    2022年5月25日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号