gpt4 book ai didi

sql-server - 回滚嵌套事务的内部事务

转载 作者:行者123 更新时间:2023-12-02 01:41:53 24 4
gpt4 key购买 nike

假设我在sql server 2008中有以下sql语句:

BEGIN TRANSACTION    
SqlStatement1
EXEC sp1
SqlStatement3
COMMIT TRANSACTION

sp1的代码

BEGIN TRANSACTION
SqlStatement2
ROLLBACK TRANSACTION

我的问题是:SqlStatement3 实际执行了吗?

最佳答案

SQL Server 并不真正支持嵌套事务。一次只有一笔交易。

这一事务有一个基本的嵌套事务计数器,@@TRANCOUNT。每个连续的开始事务都会使计数器加一,每个提交事务都会将计数器减一。只有将计数器减至 0 的提交才真正提交了一个事务。

回滚事务会撤消一个事务并清除@@TRANCOUNT

在您的例子中,有趣的结果是 SqlStatement3 在事务外部运行!您的最终提交将抛出“COMMIT TRANSACTION请求没有相应的BEGIN TRANSACTION”异常,但SqlStatement3的影响是永久性的。

例如:

create table #t (col1 int)
insert #t (col1) values (1)
BEGIN TRANSACTION
update #t set col1 = 2 -- This gets rolled back
BEGIN TRANSACTION
update #t set col1 = 3 -- This gets rolled back too
ROLLBACK TRANSACTION
update #t set col1 = 4 -- This is run OUTSIDE a transaction!
COMMIT TRANSACTION -- Throws error
select col1 from #t

打印4。真的。 :)

关于sql-server - 回滚嵌套事务的内部事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12456579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com