zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    PAT 甲级 1132 Cut Integer (20 分)
    AcWing 7.混合背包问题
    AcWing 9. 分组背包问题
    AcWing 5. 多重背包问题 II
    AcWing 3. 完全背包问题
    AcWing 4. 多重背包问题
    AcWing 2. 01背包问题
    AcWing 875. 快速幂
    AcWing 874. 筛法求欧拉函数
    AcWing 873. 欧拉函数
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2485019.html
Copyright © 2011-2022 走看看