嵌套事务的目的

问题描述 投票:0回答:2

我一直不明白嵌套事务有什么好处。提交嵌套事务不会提交任何内容 - 它只会减少

@@TRANCOUNT
。并且
ROLLBACK
会回滚所有内容。

BEGIN TRANSACTION
   //do an update
   BEGIN TRANSACTION
     //do an insert
   COMMIT TRANSACTION
COMMIT TRANSACTION

这有什么区别:

BEGIN TRANSACTION
     //do an update
     //do an insert
COMMIT TRANSACTION

请给我一个例子,为什么应该使用嵌套事务以及它们如何产生影响。

sql-server database transactions nested-transactions
2个回答
18
投票

嵌套事务允许您的代码调用其他代码(例如 SP),这些代码使用事务本身,而无需在 他们提交时实际提交 您的事务。

也就是说,您可以使用安全点在事务内部回滚。

有一篇 CodeProject 文章 专门讨论这一点。


1
投票

如果您遇到这样的情况:您呼叫一个 SP,其中包含另一个 SP 呼叫。并且该内部 SP 也可以独立于您的应用程序进行调用。在这种情况下,有必要将内部事务(在内部 SP 上)以及父 SP 上放置。

© www.soinside.com 2019 - 2024. All rights reserved.