不能在 INSERT-EXEC 语句内部使用 ROLLBACK 语句 的解决办法
来源:互联网 发布:日剧推荐 知乎 编辑:程序博客网 时间:2024/06/05 20:26
转自:http://www.6ideas.cn/ArtF/40334_91.html
两个存储过程test1和test2,在TEST1的事务里面调用TEST2(EXEC TEST2),TEST2里面也有事务,当TEST2里面的事务执行ROLLBACK时,就会报错
“消息 3915,级别 16,状态 0,过程 IMS_TJZZJYJEQ1,第 100 行,不能在 INSERT-EXEC 语句内部使用 ROLLBACK 语句。”,
原因是运行到存储过程TEST2时,有两个事务,当执行ROLLBACK时就会出错,因为TEST2是通过EXEC的方式执行的。
CREATE PROC p1
AS
-- 初始化事务和返回值设置
DECLARE
@Trancount int,
@re int
SELECT
@re = 0,
@Trancount = @@ROWCOUNT
-- 如果外层(调用者)无事务, 则直接开启事务, 否则保存事务点(这样后面可以根据情况做事务处理)
IF @Trancount = 0
BEGIN TRAN
ELSE
SAVE TRAN TRAN_Save_Point
---.... 你的处理
-- 在可能出错的语句后面应该包括类似这样的错误处理语句
IF @@ERROR <> 0
GOTO lb_Error
-- 成功提交事务
lb_Succeed:
IF @Trancount = 0
COMMIT TRAN
GOTO lb_Return
-- 失败回滚事务
lb_Error:
IF @Trancount = 0
ROLLBACK TRAN
ELSE
ROLLBACK TRAN TRAN_Save_Point
SET @re = -1
-- 退出处理
lb_Return:
RETURN @re
- 不能在 INSERT-EXEC 语句内部使用 ROLLBACK 语句 的解决办法
- INSERT EXEC 语句不能嵌套 原因说明和 解决办法
- hibernate的hql不能使用insert语句
- 关于hibernate HQL不能使用insert语句
- oracle 不能rollback ddl语句 比如drop
- SSH框架中3.0版本不能执行SQL语句update,insert的解决办法。
- 如何在INSERT语句中使用SELECT的结果
- 使用mybatis在oracle进行批量插入的insert语句
- 关于COMMIT和ROLLBACK语句的使用注意事项
- 在Insert语句中使用参数
- SQL Server 存储过程嵌套处理 错误提示:INSERT EXEC 语句不能嵌套
- 使用python的exec或eval语句。
- Rollback 语句 在08R2版本
- 使用navicat for mysql 将查询语句过滤的结果导出成insert语句时没有带表名的解决办法
- 使用mysqli时,insert 语句与 select语句的区别
- ado.net 中 “ INSERT INTO 语句的语法错误。”的解决办法
- Insert语句的语法
- INSERT语句的速度
- 深入C#学习系列二:不可小瞧的using关键字
- android自定义Toast视图
- SqlHelper
- 为什么说 Git 将取代 SVN 做软件版本控制?
- 用Mathematica给宝宝起名字
- 不能在 INSERT-EXEC 语句内部使用 ROLLBACK 语句 的解决办法
- 架构师书单[zz]
- 不重启Windows更改IP地址的多种实现
- 解决VS中Shockwave Flash Object不能引入,未注册问题
- 如何指定GCC的默认头文件路径
- 《The Social Network》
- FreeBSD下编译Fontconfig时提示src/.libs/libfontconfig.so: undefined reference to `xmlCreatePushParserCtxt' 的解决办法
- SQL SERVER 2005之视图操作
- sql server 2005之索引