命名为显性隐性和交易(named explicit & implicit transactions)

2019-10-17 09:35发布

我曾经遇到过在SQL Server 2008中的一个小bug(功能)。

我有一个存储过程,我开始明确的事务名为@tran

....声明@tran VARCHAR(30)= 'exp_trans';

BEGIN TRAN @tran IF @p_param是空ROLLBACK TRAN @tran ....

问题是,当我设置IMPLICIT_TRANSACTIONS ON和调用存储过程,流动打回退部分,我会收到错误

“消息6401,级别16,状态1,行10无法回滚exp_tran。该名称的任何事务或保存被发现。”

这是某种功能的,或者什么是实际发生的? 先感谢您

Answer 1:

我相信这是因为嵌套事务和SQL Server 2008时,不支持回滚到内部交易发生的事务被嵌套 :

与交易名称的一系列嵌套事务的多个事务命名的事务没有什么影响。 只有第一个(最外面的)事务名在系统中注册。 回滚到任何其他名称(有效的保存名称其他)产生错误。 回滚之前执行的语句都不是,事实上,回滚在发生此错误的时间。 这些语句被回滚,只有当外部事务回滚。

您的事务被嵌套,因为隐含的交易设定一个开始,在开始反式启动第二(嵌套)交易。 并说对指定的事务失败回滚。



文章来源: named explicit & implicit transactions