1

我试图了解 SQL Server 中的嵌套事务。让我们考虑以下 SQL 命令链:

BEGIN TRANSACTION; -- #1
BEGIN TRANSACTION; -- #2
UPDATE foo SET column = 'something'; -- Change something in one table.
COMMIT TRANSACTION; -- #2

如果事务#2 的提交成功,事务#1 的提交是否可能失败?如果是,您能否举例说明这种情况何时发生?

4

1 回答 1

6

来自每天的 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

DBFiddle 演示

如果您想要 Oracle 自治事务之类的内容,请阅读:在当前事务之外提交事务(如 Oracle 中的自治事务)

于 2018-07-07T15:15:32.137 回答