insert into select from 批量插入数据事务

米修哥Coding 2013-03-28 10:47:05
当其中一条数据插入不成功,回滚全部已插入数据。现在是回滚没有全部回滚,只有错误的记录没有插入。

SET @strSql = 'INSERT INTO ' + @strSqlTableName + '('+ @strSqlFiled +',userid,StaffNumbers) SELECT a.*,b.id,b.StaffNumbers FROM ##Temp a join ry_frmUser b on a.姓名=b.LastName'
##Temp表的数据是存储过程从Excel读取的数据
在存储过程里,试过了几种方法都不行
1. Set NOCOUNT ON;
Set XACT_ABORT ON;
begin tran
EXEC(@strSql)
commit tran


2. begin tran
begin try
EXEC(@strSql)
end try
begin catch
if(@@trancount > 0)
begin
print '插入失败,回滚...'
rollback tran
end
end catch
if(@@trancount >0)
begin
print '插入成功!'
commit tran
end


3. BEGIN TRAN trans1
EXEC(@strSql)
DROP TABLE ##Temp
set @flag='1'
IF @@ERROR<>0
goto ERROR_HANDLER;
COMMIT TRAN trans1
return;
ERROR_HANDLER:
BEGIN
ROLLBACK TRAN trans1;
set @flag='0'
END;


请高手指点,谢谢了!
...全文
1030 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
szm341 2013-03-29
  • 打赏
  • 举报
回复
帮你顶上去~我也想知道是哪里设置的不对了
米修哥Coding 2013-03-28
  • 打赏
  • 举报
回复
insert select应该是批量插入的,我的目的是一条出错就所有的记录都回滚,连带之前已经成功的。 现在是没有全部回滚啊。。不知本来就这样,还是要怎么写呢
szm341 2013-03-28
  • 打赏
  • 举报
回复
insert select语句本身就是一条事务,如果select出的数据有一条出错就都回滚了啊 不会出现你说的状况吧
csl_1022 2013-03-28
  • 打赏
  • 举报
回复
插入成功的应该不能回滚吧 回滚到当前状态

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧