2012-06-09 9 views
11

Ich habe nie verstanden, was eine verschachtelte Transaktion gut ist. Beim Übergeben einer verschachtelten Transaktion wird nichts übernommen - es wird nur @@TRANCOUNT verringert. Und ROLLBACK Rollbacks alles.Zweck der verschachtelten Transaktionen

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

Was ist der Unterschied dabei ist:

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

Bitte geben Sie mir ein Beispiel, warum verschachtelte Transaktionen verwendet werden sollen und wie sie einen Unterschied machen.

Grüße, Petar

Antwort

8

Verschachtelte Transaktionen ermöglichen den Code anderen Code (SPs zum Beispiel) zu nennen, welche Transaktionen selbst, ohne tatsächlich zu begehen Ihre Transaktion verwendet, wenn sie begehen.

Das heißt, Sie können Safepoints verwenden, um innerhalb einer Transaktion zurückzusetzen.

Es gibt eine CodeProject article dediziert.

+0

Ich kann Safepoints ohne verschachtelte Transaktionen verwenden. Die gespeicherte Prozedur ist ein guter Punkt (ich habe nie darüber nachgedacht). Aber wenn ich keine gespeicherte Prozedur in meiner Transaktion verwende (oder keinen anderen Code aufrufen), warum sollte ich geschachtelte Transaktionen benötigen? Ich sehe ständig Beispiele mit verschachtelten Transaktionen und ich sehe nicht den Sinn von ihnen. –

+0

Sind verschachtelte Transaktionen nur beim Aufrufen von externem Transaktionscode nützlich? –

+1

Ich stimme Ihnen zu und ich denke, dass sie nützlich sind, um externen Transaktionscode aufzurufen. Die technische Fähigkeit von SQL Server, verschachtelte Transaktionen zu verarbeiten, ist wichtig und nicht in allen DB-Systemen verfügbar. Es gibt einige Fälle (z. B. mit den erwähnten SPs - wo Sie auch [SET XACT_ABORT ON] verwenden sollten (http://stackoverflow.com/questions/1150032/what-is-the-benefit-of-using-set) -xact-abort-on-in-stored-procedure)), wo sie "natürlich" verschachteln können. Ich habe auch nie explizit verschachtelte Transaktionen verwendet. – Lucero

0

Wenn Sie ein Szenario haben, in dem Sie einen SP anrufen, der einen anderen SP-Aufruf enthält. und dieser innere SP kann auch unabhängig von Ihrer Anwendung aufgerufen werden. In diesem Fall ist es notwendig, die innere Transaktion (auf Inner SP) sowie auf den Eltern-SP zu platzieren.