灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2386回复:0

[SQL Server]sql server批量插入与更新两种解决方案

楼主#
更多 发布于:2012-09-04 18:06

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

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

1.游标方式
1 DECLARE @Data NVARCHAR(max)
2 SET @Data='1,tanw,2,keenboy'   --Id,Name
3   www.atcpu.com  
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 */  www.atcpu.com  
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       www.atcpu.com  
20     /*
21    
22         在这里做逻辑处理,插入或更新操作 ...
23    
24     */
25 END
26 SELECT @Results

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





喜欢0 评分0
游客

返回顶部