2012-06-09 47 views
11

我从来没有理解嵌套事务的好处。提交一个嵌套事务不会提交 - 它只会减少@@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 

请给我一个例子,为什么应该嵌套事务中使用,以及它们如何有所作为。

问候,斯托

回答

8

嵌套事务允许您的代码调用其他代码(SPS例如),其使用交易本身没有实际犯下交易时他们提交。

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

有一个CodeProject article致力于此。

+0

我可以使用safepoints而不使用嵌套事务。存储过程是一个好点(我从来没有想到这一点)。但是,如果我在事务中不使用存储过程(或者不调用其他代码),为什么我需要嵌套事务?我经常看到嵌套事务的例子,我没有看到它们的重点。 –

+0

那么嵌套事务只有在调用外部事务代码时才有用? –

+1

我同意你的看法,我认为它们对于调用外部事务代码很有用。 SQL Server处理嵌套事务的技术能力很重要,并且在所有数据库系统中都不可用。有一些情况下(如提到的SP - 你应该也使用['SET XACT_ABORT ON']](http://stackoverflow.com/questions/1150032/what-is-the-benefit-of-using-set -xact-abort-on-a-stored-procedure))他们可以在其中“自然地”嵌套。我从来没有使用明确的嵌套事务。 – Lucero

0

如果您正在调用其中包含其他SP呼叫的一个SP的情况。而且内部SP也可以独立于您的应用程序调用。在这种情况下,它必须放置内部交易(在内部SP)以及在父级SP。