Mar*_*mro 1 sql t-sql sql-server transactions nested-transactions
我正在尝试理解SQL Server中的嵌套事务.让我们考虑以下SQL命令链:
BEGIN TRANSACTION; -- #1
BEGIN TRANSACTION; -- #2
UPDATE foo SET column = 'something'; -- Change something in one table.
COMMIT TRANSACTION; -- #2
Run Code Online (Sandbox Code Playgroud)
如果事务#2的提交成功,那么事务#1的提交可能会失败吗?如果是的话,你可以提供一个可能发生这种情况的例子吗?
从一天的SQL Server DBA神话:(26/30)嵌套事务是真实的:
嵌套事务的提交绝对没有效果 - 因为就SQL Server而言,唯一真正存在的事务是外部事务....
嵌套事务的回滚会回滚整个事务集 - 因为没有嵌套事务这样的事情.
SELECT @@TRANCOUNT;
BEGIN TRANSACTION; -- #1
SELECT @@TRANCOUNT;
BEGIN TRANSACTION; -- #2
SELECT @@TRANCOUNT;
UPDATE foo SET [column] = 'something';
COMMIT TRANSACTION; -- #2
SELECT @@TRANCOUNT;
ROLLBACK; -- simulate error or explicit rollback
-- update is lost
Run Code Online (Sandbox Code Playgroud)
如果你想要类似Oracle自治事务的东西,请阅读:在当前事务之外提交事务(如Oracle中的自治事务)
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |