sql server中批量插入与更新两种解决方案分享(存储过程)

 更新时间:2012年05月10日 22:40:07   作者:  
对于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

/*
在这里做逻辑处理,插入或更新操作 ...
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

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

作者 keenboy

相关文章

  • SqlServer 垂直分表(减少程序改动)

    SqlServer 垂直分表(减少程序改动)

    当单表数据太多时,我们可以水平划分,参考 SqlServer 分区视图实现水平分表 ,水平划分可以提高表的一些性能
    2021-04-04
  • group by 按某一时间段分组统计并查询(推荐)

    group by 按某一时间段分组统计并查询(推荐)

    这篇文章主要介绍了group by 按某一时间段分组统计并查询,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • SQL语句中的DDL类型的数据库定义语言操作

    SQL语句中的DDL类型的数据库定义语言操作

    这篇文章主要介绍了SQL语句中的DDL类型的数据库定义语言,主要是用来定义数据库中的对象的,例如数据库、表和字段的定义,简单的理解就是DDL语言是来操作数据库、表和字段的,需要的朋友可以参考下
    2022-08-08
  • SQL2008的sa账户被禁用其他账户无法连接的快速解决方法

    SQL2008的sa账户被禁用其他账户无法连接的快速解决方法

    这篇文章主要介绍了SQL2008的sa账户被禁用其他账户无法连接的快速解决方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03
  • SQL Server的死锁说明

    SQL Server的死锁说明

    死锁是导致数据库中的竞争性并发锁,通常在多步骤事务中。当两个或多个任务永久相互阻止时,每个任务都锁定了其他任务尝试锁定的资源,就会发生死锁。本文主要介绍了SQL Server的死锁,感兴趣的朋友可以参考阅读
    2023-04-04
  • SQL server 2019数据库安装教程详解

    SQL server 2019数据库安装教程详解

    SQL Server 是Microsoft 公司推出的关系型数据库管理系统,具有使用方便可伸缩性好与相关软件集成程度高等优点,Microsoft SQL Server 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,本章教程,介绍一下SQL Server 2019的安装过程
    2024-09-09
  • 关于数据库优化问题收集汇总

    关于数据库优化问题收集汇总

    笔者在工作实践中发现,不良的SQL往往来自于不恰当的索引设计、不充份的连接条件和不可优化的where子句。以下就对数据库优化问题进行了介绍,需要的朋友可以参考下
    2013-07-07
  • 用sql获取某字符串中的数字部分的语句

    用sql获取某字符串中的数字部分的语句

    此方法可以解决查询某字段中数字部分为固定值的记录,字母部分为定值类似
    2009-09-09
  • sql 删除表中的重复记录

    sql 删除表中的重复记录

    本文主要介绍了sql 删除表中的重复记录的方法,具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • 使用SqlBulkCopy时应注意Sqlserver表中使用缺省值的列

    使用SqlBulkCopy时应注意Sqlserver表中使用缺省值的列

    今天,想将以前做的一个程序增加点功能,原本就使用SqlBulkCopy批量、定时的从目录中的txt文件导入数据到Sqlserver中。以前一直都使用正常,但是不知怎的就老是出现一个错误
    2012-07-07

最新评论