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)
上一篇 2021年8月8日 下午10:00
下一篇 2021年8月9日 上午8:00


相关推荐

  • class文件常量池与运行时常量池_java运行时常量池

    class文件常量池与运行时常量池_java运行时常量池JVM进阶(十九)——Class文件常量池  在上一博文《JVM进阶(十八)——初识Class文件》中,我们了解了Class文件的一些基础知识。他的整个内部结构就是一张很大的表,我们就是从这张表入手,一一分析每个部分的结构。继续看这张表:  接着上一博文所说,魔数后面分别是次版本号和主版本号。由上图可知其分别占用两个字节。  被蓝色框框住的就是次版本号,划红线的就是主版本号。再次说明

    2025年10月15日
    4
  • junit mock 方法(need的用法总结)

    使用EasyMock的总体步骤1、生成Mock接口IServicemockService=EasyMock.createMock(“name”,IService.class);如果要mock对象,而不是接口,应该使用classextension:org.easymock.classextension.EasyMock如果要mock多个接口,最好使用Mo

    2022年4月12日
    471
  • Asp.net Core + EF Core + Bootstrap搭建的MVC后台通用管理系统模板(跨平台版本)

    Asp.net Core + EF Core + Bootstrap搭建的MVC后台通用管理系统模板(跨平台版本)6月随着.NETCOREPREVIEW2的发布,JUCHEAP的CORE版本也由之前的JuCheapCore1.0升级到了JuCheapCore2.0,并且已经在将core版本应用到了生产环境中,现在支持的数据库库有SQLSERVER2008以上,以及SQLITE;项目源代码地址,在文末.部署到ubuntu16.04下的效果如下:源码下载地址:h…

    2022年7月22日
    17
  • ANTLR4 PL/SQL 解析器在 Python 中的谓词语法适配指南

    ANTLR4 PL/SQL 解析器在 Python 中的谓词语法适配指南

    2026年3月13日
    1
  • IDM插件安装、使用方法教程

    IDM插件安装、使用方法教程0x00 前言今天给大家推荐一个特别好用的下载工具 那就是互联网下载管理器 IDM 这个工具是一种可以将下载速度提升 5 倍 可以恢复和制定下载时间表的工具 可以说 IDM 是 Windows 平台老牌而功能强大的下载工具之一 软件提供了下载队列 站点抓取和映射服务器 多媒体下载 静默下载等功能 还支持多款浏览器 对于经常有文件下载需求的用户来说 是一个非常不错的选择 并且 IDM 名声在外 配合

    2026年3月19日
    2
  • php小程序开发完整教程_微信小程序request封装

    php小程序开发完整教程_微信小程序request封装flyio:一个支持所有JavaScript运行环境的基于Promise的、支持请求转发、自动转换JSON、支持请求/响应拦截器、强大的http请求库。可以让您在多个端上尽可能大限度的实现代码复用。flyio官方文档flyio下载地址原生微信小程序中使用flyio请求,封装代码如下一、在src/utils下新建request.js文件,文件代码如下:/*flyio:一个支持所有JavaScript运行环境的基于Promise的、支持请求转发、强大的http请求库。可以让您在多

    2025年10月4日
    6

发表回复

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

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