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

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

时间: 2024-10-29 12:37:11

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

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 @@F

sql server中批量插入与更新两种解决方案分享(asp.net)_实用技巧

若只是需要大批量插入数据使用bcp是最好的,若同时需要插入.删除.更新建议使用SqlDataAdapter我测试过有很高的效率,一般情况下这两种就满足需求了 bcp方式 复制代码 代码如下: /// <summary> /// 大批量插入数据(2000每批次) /// 已采用整体事物控制 /// </summary> /// <param name="connString">数据库链接字符串</param> /// <param n

SQL Server中处理单引号的两种技巧

和数据库打交道要频繁地用到SQL语句,除非你是全部用控件绑定的方式,但采用控件绑定的方式存在着灵活性差.效率低.功能弱等等缺点.因此,大多数的程序员极少或较少用这种绑定的方式.而采用非绑定方式时许多程序员大都忽略了对单引号的特殊处理,一旦SQL语句的查询条件的变量有单引号出现,数据库引擎就会报错指出SQL语法不对,本人发现有两种方法可以解决和处理这种单引号的问题(以VB为例子). 方法一:利用转义字符处理SQL语句.下面的函数可以在执行SQL语句前调用,执行处理后的结果即可产生正确的结 果. F

SQL SERVER中强制类型转换cast和convert的区别详解_MsSql

SQL SERVER中强制类型转换cast和convert的区别 在SQL SERVER中,cast和convert函数都可用于类型转换,其功能是相同的, 只是语法不同. cast一般更容易使用,convert的优点是可以格式化日期和数值. select CAST('123' as int) -- 123 select CONVERT(int, '123') -- 123 select CAST(123.4 as int) -- 123 select CONVERT(int, 123.4) --

在SQL SERVER中实现Split功能的函数,并在存储过程中使用

代码 CREATE FUNCTION dbo.SplitString(          @Expression NVARCHAR(4000), --要拆分的字符串          @Delimiter NVARCHAR(100), --拆分符号          @n INT --要得到已拆分的返回字符串位置)RETURNS NVARCHAR(4000)ASBEGINDECLARE @p INTSET @p = CharIndex(@Delimiter,@Expression)IF @p >

SQL Server中事务复制造成更新丢失的解决方法

造成更新丢失的常见情况有三种: 1.发布数据库启用了read_committed_http://www.aliyun.com/zixun/aggregation/11220.html">snapshot隔离级别可能导致分发代理报20598错.我们可以通过检查发布数据库的隔离级别属性是否为read_committed_snapshot判断这种问题的可能性. use <pubdb> go dbcc useroptions go 2.订阅方手动改变数据 3.外键或触发器的"

MSSQL批量替换语句 在SQL SERVER中批量替换字符串的方法

方法一:(这种是最常用的,因为很多大段的内容都使用text ntext等数据类型,而我们通常也是替换里面的内容) varchar和nvarchar类型是支持replace,所以如果你的text不超过8000可以先转换成前面两种类型再使用replace 替换 text ntext 数据类型字段的语句 复制代码 代码如下:update 表名 set 字段名=replace(cast(与前面一样的字段名 as varchar(8000)) ,'原本内容','想要替换成什么') 方法二:(替换其他数据类

MSSQL批量替换语句 在SQL SERVER中批量替换字符串的方法_MsSql

方法一:(这种是最常用的,因为很多大段的内容都使用text ntext等数据类型,而我们通常也是替换里面的内容) varchar和nvarchar类型是支持replace,所以如果你的text不超过8000可以先转换成前面两种类型再使用replace 替换 text ntext 数据类型字段的语句 复制代码 代码如下: update 表名 set 字段名=replace(cast(与前面一样的字段名 as varchar(8000)) ,'原本内容','想要替换成什么') 方法二:(替换其他数据

在SQL SERVER中批量替换字符串的方法

  方法一:(这种是最常用的,因为很多大段的内容都使用text ntext等数据类型,而我们通常也是替换里面的内容) varchar和nvarchar类型是支持replace,所以如果你的text不超过8000可以先转换成前面两种类型再使用replace 替换 text ntext 数据类型字段的语句 update 表名 set 字段名=replace(cast(与前面一样的字段名 as varchar(8000)) ,'原本内容','想要替换成什么') 方法二:(替换其他数据类型字段的语句,实