Frage

Wenn ich eine gespeicherte Prozedur in SQL und nenne es (EXEC spStoredProcedure) innerhalb der BEGIN / END TRANSACTION erstellen, wird die andere gespeicherte Prozedur auch in die Transaktion fallen?

Ich wusste nicht, ob es so versuchen gearbeitet / Fänge in C #.

War es hilfreich?

Lösung

Ja, alles , die Sie tun, zwischen dem Start der Transaktion und Commit (oder Rollback) ist Teil der Transaktion.

Andere Tipps

Hört sich gut an, dank einem Haufen. Ich landete so etwas wie dies zu tun (weil ich bin auf 05)

    BEGIN TRY
       BEGIN TRANSACTION

       DO SOMETHING

       COMMIT
    END TRY
    BEGIN CATCH
      IF @@TRANCOUNT > 0
         ROLLBACK

      -- Raise an error with the details of the exception
      DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int
      SELECT @ErrMsg = ERROR_MESSAGE(),
             @ErrSeverity = ERROR_SEVERITY()

      RAISERROR(@ErrMsg, @ErrSeverity, 1)
    END CATCH

Ich glaube, in MS SQL Server die gespeicherte Prozedur der Ausführung innerhalb der Transaktion geschehen würde, aber mit diesem sehr vorsichtig sein. Wenn Sie Transaktionen verschachtelt haben (dh Transaktion außerhalb der gespeicherten Prozedur und eine anderen Transaktion innerhalb der gespeicherten Prozedur), wird ein Rollback aller Transaktionen beeinflusst, nicht nur die nächste einschließende Transaktion.

Als Chris erwähnt, sollten Sie vorsichtig sein, über die Transaktion zurück rollen.

Insbesondere folgt aus:

IF @@TRANCOUNT > 0 ROLLBACK

ist nicht immer das, was Sie wollen. Man könnte so etwas tun

IF(@@TRANCOUNT = 1) ROLLBACK TRAN
ELSE IF(@@TRANCOUNT > 1) COMMIT TRAN
RETURN @error

Auf diese Weise kann der Aufruf proc den Rückgabewert der gespeicherten Prozedur prüfen und festzustellen, ob es trotzdem begehen will oder weiterhin die Fehler zu sprudeln.

Der Grund dafür ist, dass ‚COMMIT‘ wird nur Ihre Transaktionszähler dekrementieren. Sobald es die Transaktionszähler auf Null dekrementiert, dann begehen eine tatsächliche auftreten.

Wie Chris und James erwähnt, müssen Sie vorsichtig sein, wenn mit verschachtelten Transaktionen zu tun. Es gibt eine Reihe eine sehr gute Artikel zum Thema Transaktionen geschrieben von Don Peterson SQL Server Centra l, würde ich empfehlen, gelesen von solchen mit:

Hier gibt es:

Ja, alle verschachtelten gespeicherte Prozeduraufrufe werden im Rahmen der Transaktion enthält. Wenn Sie SQL Server 2005 oder höher verwenden, können Sie versuchen, verwenden ... wie gut fangen. Hier ist mehr darüber zu.

@ Chris, ich wusste nicht, dass.

Wenn für weitere Informationen googeln, stieß ich auf dieser - Sie können ‚Savepoints‘ gesetzt, die wieder die gesamte Transaktion rückgängig gemacht werden können, ohne zurück~~POS=TRUNC.

kann in dieser Situation nützlich sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top