求"不能在 INSERT-EXEC 语句内部使用 ROLLBACK 语句" 的解决方法?

renzhiboy 2010-01-04 12:55:07
有两个存储过程sp1和sp2:
---------------------------------------------------
sp2对某一流程进行处理,并返回处理结果,其中包含事务
简单流程如下:
BEGIN TRANSACTION
。。。。
。。。
if(...)
COMMIT TRANSACTION
select 1,'成功'
return 1
else
ROLLBACK TRANSACTION
select 0,'失败'
-------------------------------------------------
sp1参数是个自定义表结构用于批量传入要处理的数据
:
再自定义一个表变量@t用于返回批量执行结果
用游标循环执行sp2,并将结构插入@t
insert into @t exec sp2
最后将@t的结果返回出来
-------------------------------------------------
我在单独对sp2测试时是正常的
不论是否回滚都是正常的
但是测试sp1时,如果sp2不回滚就正常输出,
如果sp2回滚就报错:不能在 INSERT-EXEC 语句内部使用 ROLLBACK 语句
请问大师们该如何处理?或者有没变通的方法?谢谢


...全文
308 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gw6328 2010-06-24
  • 打赏
  • 举报
回复
今天遇到这个了。是insert @t exec up_xxx 这样不可以用事务
chuifengde 2010-01-04
  • 打赏
  • 举报
回复
内部去掉rollback tran ,最上面加上set xact_abort on
guguda2008 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 renzhiboy 的回复:]
引用 3 楼 happyflystone 的回复:
可以先执行读取Return的值,如果正常再insert

exec sp2后就是返回的值了,再如何操作呢?

[/Quote]
用输出参
renzhiboy 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 happyflystone 的回复:]
可以先执行读取Return的值,如果正常再insert
[/Quote]
exec sp2后就是返回的值了,再如何操作呢?
-狙击手- 2010-01-04
  • 打赏
  • 举报
回复
可以先执行读取Return的值,如果正常再insert
SQL77 2010-01-04
  • 打赏
  • 举报
回复
EXEC里面不能用事务?

存储过程里面可以用事务的呀

帮顶学习
  • 打赏
  • 举报
回复
帮顶

22,209

社区成员

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

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