关于sql server批量插入与更新两种解决方案
2012-05-07 11:31
239 查看
.游标方式
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
//---------下面的方式比较适合----------//
BCP方式:
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
//---------下面的方式比较适合----------//
BCP方式:
相关文章推荐
- 关于sql server批量插入和更新的两种解决方案
- 关于sql server批量插入和更新的两种解决方案
- 关于sql server批量插入和更新的两种解决方案
- sql server批量插入与更新两种解决方案
- sql server批量插入与更新两种解决方案
- (转)sql server批量插入与更新两种解决方案
- sql server中批量插入与更新两种解决方案分享
- sql server中批量插入与更新两种解决方案分享(存储过程)
- sql server中批量插入与更新两种解决方案分享(存储过程)
- sql server中批量插入与更新两种解决方案分享(asp.net)
- sql server中批量插入与更新两种解决方案分享(存储过程)
- Vue--关于点击当前路由,视图无法更新的解决方案
- Android 关于在ScrollView中加上一个ListView,ListView内容显示不完全(总是显示第一项)的问题的两种简单的解决方案
- Mysql中created_at字段与updated_at字段关于自动更新与自动插入时间戳
- MYSQL中防止插入重复记录的解决方案(无重复值更新)
- 关于sencha touch在华为、红米等部分手机下hide事件失效,msgbox无法关闭的解决方案(已更新最新解决方案)
- SQL中MERGE关于更新、插入的一种用法
- 关于Asp.Net MVC 中 UpdateModel 的未能更新***模型的 解决方案!