关于sql server批量插入和更新的两种解决方案

转载 2013年12月02日 12:38:35

关于sql server批量插入和更新的两种解决方案

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

复制代码 代码如下:
.游标方式 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

/*
在这里做逻辑处理,插入或更新操作 ...
*/
END

CLOSE data_cursor
DEALLOCATE data_cursor

复制代码 代码如下:
.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+','

     /*

在这里做逻辑处理,插入或更新操作 ...

     */
END
SELECT @Results

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

SQLServer批量更新、批量插入

最近遇到这样一个问题,项目中几个地方存储的地址只有一个字段,省市区县道路都在一起,地区检索用like,这简直是无法忍受的,经商讨决定对原地址进行拆分,但是数据量相对较大,其中最少的一张表中有70万的数...
  • fengkang511
  • fengkang511
  • 2016年06月28日 21:37
  • 5582

mybatis如何实现批量更新和插入新增实例详解(附SQL以及mapper配置)

mybatis如何实现批量更新和插入新增实例详解(附SQL以及mapper配置) 本系列示例sql均在Mysql中验证过Mybatis批量插入、批量修改批量插入 step1:创建DB表...
  • zixiao217
  • zixiao217
  • 2016年08月14日 16:01
  • 5729

mybatis中批量插入的两种方式(高效插入)

MyBatis简介 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可...
  • e_wsq
  • e_wsq
  • 2017年01月11日 16:07
  • 15627

探讨SQL Server并发处理存在就更新七种解决方案

探讨SQL Server并发处理存在就更新七种解决方案 前言 本节我们来讲讲并发中最常见的情况存在即更新,在并发中若未存在行记录则插入,此时未处理好极容易出现插入重复键情况,本...
  • xxdddail
  • xxdddail
  • 2017年06月01日 08:54
  • 526

SQL Server 批量插入数据的两种方法

在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Insert不仅效率低,而且会导致SQL一系统性能问题。下面介绍SQL Server支持的两种批量...
  • ycl295644
  • ycl295644
  • 2015年06月06日 13:53
  • 1944

SQL Server 批量插入数据的两种方法

在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Insert不仅效率低,而且会导致SQL一系统性能问题。下面介绍SQL Server支持的两种批量...
  • yuanyuanispeak
  • yuanyuanispeak
  • 2013年07月12日 11:09
  • 1940

SQL Server 批量插入数据的两种方法

SQL Server 批量插入数据的两种方法 (此文原创自CSDN TJVictor专栏:http://blog.csdn.net/tjvictor/archive/2009/07/18/43600...
  • ChickenLittle
  • ChickenLittle
  • 2011年09月05日 08:21
  • 98

SQL Server 批量插入数据的两种方法

在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Insert不仅效率低,而且会导致SQL一系统性能问题。下面介绍SQL Server支持的两种批量...
  • smilepasta035
  • smilepasta035
  • 2016年08月26日 11:09
  • 256

2015-03-19 SQL Server 批量插入数据的两种方法

此文原创自CSDN TJVictor专栏:http://blog.csdn.net/tjvictor/archive/2009/07/18/4360030.aspx    在SQL Serv...
  • lxl743p
  • lxl743p
  • 2015年03月19日 14:20
  • 574

SQL Server 和ORACLE 批量插入数据的两种方法

SQL Server 批量插入数据的两种方法  在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Insert不仅效率低,而且会导致...
  • eryongyan
  • eryongyan
  • 2013年09月26日 20:29
  • 4997
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于sql server批量插入和更新的两种解决方案
举报原因:
原因补充:

(最多只允许输入30个字)