zoukankan      html  css  js  c++  java
  • 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,';')) 
    OPEN data_cursor 
    FETCH NEXT FROM data_cursor INTO @dataItem 
    WHILE @@FETCH_STATUS=0 
    BEGIN 
    DECLARE @Id INT 
    DECLARE @Name NVARCHAR(50) 
    
    DECLARE dataItem_cursor CURSOR FOR (SELECT * FROM split(@dataItem,',')) 
    OPEN dataItem_cursor 
    FETCH NEXT FROM dataItem_cursor INTO @Id 
    FETCH NEXT FROM dataItem_cursor INTO @Name 
    CLOSE dataItem_cursor 
    DEALLOCATE dataItem_cursor 
    
    /* 
    在这里做逻辑处理,插入或更新操作 ... 
    www.jb51.net 
    */ 
    END 
    CLOSE data_cursor 
    DEALLOCATE data_cursor 

    2.While方式 

    DECLARE @Data NVARCHAR(max) 
    SET @Data='tanw,keenboy' --Id,Name 
    
    DECLARE @Temp TABLE 
    ( 
    Id INT IDENTITY(1,1), 
    Name NVARCHAR(50) 
    ) 
    DECLARE @Id INT 
    DECLARE @Name NVARCHAR(50) 
    DECLARE @Results NVARCHAR(MAX) SET @Results='' 
    INSERT INTO @Temp SELECT (SELECT * FROM split(@Data,';')) 
    
    WHILE EXISTS(SELECT * FROM @Temp) 
    BEGIN 
    SELECT TOP 1 @Id=Id,@Name=Name from @Temp 
    DELETE FROM @Temp where [id] = @Id 
    SET @Results=@Results+@Name+',' 
    www.jb51.net 
    /* 
    在这里做逻辑处理,插入或更新操作 ... 
    */ 
    END 
    SELECT @Results 

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

  • 相关阅读:
    java 8 , merge()
    2026 11 12
    koda java
    Linq实现between拓展
    WinForm开发----关闭window窗体最好的办法
    ASP.NET中指定自定义HTTP响应标头
    使用Zxing.net实现asp.net mvc二维码功能
    实现asp.net mvc页面二级缓存,提高访问性能
    队列应用
    Ubuntu 12.04使用uginx+fastcgi-mono-server2部署asp.net 网站
  • 原文地址:https://www.cnblogs.com/stevenjson/p/3726728.html
Copyright © 2011-2022 走看看