好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

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

分类:  sql server

标签:  sql server ,  游标 ,  数据库 ,  sql server批量操作 ,  sql server批量更新

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于sql server批量插入与更新两种解决方案的详细内容...

  阅读:57次