您的位置:首页 > 数据库

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

2012-05-05 20:10 399 查看
对于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




分类: sql server
标签: sql server, 游标, 数据库, sql server批量操作, sql server批量更新
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: