我试图了解 SQL Server 中的嵌套事务。让我们考虑以下 SQL 命令链:
BEGIN TRANSACTION; -- #1
BEGIN TRANSACTION; -- #2
UPDATE foo SET column = 'something'; -- Change something in one table.
COMMIT TRANSACTION; -- #2
如果事务#2 的提交成功,事务#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 的提交是否可能失败?如果是,您能否举例说明这种情况何时发生?
来自每天的 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
如果您想要 Oracle 自治事务之类的内容,请阅读:在当前事务之外提交事务(如 Oracle 中的自治事务)