`
wodamazi
  • 浏览: 1416624 次
文章分类
社区版块
存档分类
最新评论

sql server批量插入与更新两种解决方案

阅读更多

对于sql 来说操作集合类型(一行一行)是比较麻烦的一件事,而一般业务逻辑复杂的系统或项目都会涉及到集合遍历的问题,通常一些人就想到用游标,这里我列出了两种方案,供大家参考

复制代码

1.游标方式

 1 DECLARE @Data NVARCHAR(max) 
 2 SET @Data='1,tanw,2,keenboy'   --Id,Name
 3 
 4 DECLARE @dataItem NVARCHAR(100) 
 5 DECLARE data_cursor CURSOR FOR (SELECT * FROM split(@Data,';'))
 6 OPEN data_cursor
 7 FETCH NEXT FROM data_cursor INTO @dataItem    
 8 WHILE @@FETCH_STATUS=0
 9 BEGIN
10 DECLARE @Id INT 
11 DECLARE @Name NVARCHAR(50)
12 
13 DECLARE dataItem_cursor CURSOR FOR (SELECT * FROM split(@dataItem,','))
14 OPEN dataItem_cursor    
15 FETCH NEXT FROM dataItem_cursor INTO @Id
16 FETCH NEXT FROM dataItem_cursor INTO @Name
17 CLOSE dataItem_cursor
18 DEALLOCATE dataItem_cursor
19 
20 /*
21   在这里做逻辑处理,插入或更新操作 ...
22 */
23 END
24 
25 CLOSE data_cursor
26 DEALLOCATE data_cursor
复制代码
复制代码
2.While方式

 1 DECLARE @Data NVARCHAR(max) 
 2 SET @Data='tanw,keenboy'   --Id,Name
 3 
 4 DECLARE @Temp TABLE
 5 ( 
 6    Id INT IDENTITY(1,1), 
 7    Name  NVARCHAR(50)
 8 ) 
 9 DECLARE @Id INT
10 DECLARE @Name NVARCHAR(50)
11 DECLARE @Results NVARCHAR(MAX) SET @Results=''
12 INSERT INTO @Temp SELECT (SELECT * FROM split(@Data,';'))
13 
14 WHILE EXISTS(SELECT * FROM @Temp) 
15 BEGIN 
16     SELECT TOP 1 @Id=Id,@Name=Name from @Temp 
17     DELETE FROM @Temp where [id] = @Id 
18     SET @Results=@Results+@Name+','
19     
20     /*
21     
22         在这里做逻辑处理,插入或更新操作 ...
23     
24     */
25 END
26 SELECT @Results
复制代码

如果是简单单表批量插入操作的,上面方法大可不必要

0
1
分享到:
评论
1 楼 留下的祝福 2012-05-07  
要是多有点注释就好了

相关推荐

    关于sql server批量插入和更新的两种解决方案

    代码如下:.游标方式 1 DECLARE @Data NVARCHAR(max) SET @Data=’1,tanw;2,keenboy’ –Id,Name DECLARE @dataItem NVARCHAR(100) DECLARE data_cursor CURSOR FOR (SELECT * FROM split(@Data,’;...

    sql server中批量插入与更新两种解决方案分享(asp.net)

    若只是需要大批量插入数据使用bcp是最好的,若同时需要插入、删除、更新建议使用SqlDataAdapter我测试过有很高的效率,一般情况下这两种就满足需求了 bcp方式 代码如下: /// <summary> /// 大批量插入数据(2000每...

    sql server中批量插入与更新两种解决方案分享(存储过程)

    1.游标方式 代码如下: DECLARE @Data NVARCHAR(max) SET @Data=’1,tanw,2,keenboy’ –Id,Name DECLARE @dataItem NVARCHAR(100) DECLARE data_cursor CURSOR FOR (SELECT * FROM split(@Data,’;...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    每个实例都是经过笔者精心筛选的,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。 本书两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;本书实例来源...

    C#编程经验技巧宝典

    2 <br>0003 设置程序代码行序号 3 <br>0004 开发环境全屏显示 3 <br>0005 设置窗口的自动隐藏功能 3 <br>0006 根据需要创建所需解决方案 4 <br>0007 如何使用“验证的目标架构”功能 4 ...

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    实例004 根据需要创建所需解决方案 6 1.2 Visual Studio开发环境的使用 8 实例005 为程序设置版本和帮助信息 8 实例006 设置Windows应用程序启动窗体 9 实例007 统一窗体中控件的字体设置 10 实例008 通过“格式”...

    易语言程序免安装版下载

     支持静态链接其它编程语言(如C/C++、汇编等)编译生成的静态库(.LIB或.OBJ),但仅限于COFF格式,支持cdecl和stdcall两种函数调用约定。  使用说明如下:函数声明和调用方法与DLL命令一致;“库文件名”以.lib...

Global site tag (gtag.js) - Google Analytics