Wie rolle ich eine Transaktion in einer gespeicherten Prozedur zurück?

7

Mit Blick auf die SQL Server-Onlinedokumentation scheint Microsoft eine (falsche) Methode zur Verarbeitung verschachtelter Transaktionen in einer gespeicherten Prozedur :

  

Schachtelungstransaktionen

     

Explizite Transaktionen können verschachtelt werden. Dies dient hauptsächlich dazu, Transaktionen in gespeicherten Prozeduren zu unterstützen, die entweder von einem bereits in einer Transaktion ausgeführten Prozess oder von Prozessen ohne aktive Transaktion aufgerufen werden können.

Das Beispiel zeigt eine gespeicherte Prozedur, die eine eigene Transaktion startet ("Die Prozedur erzwingt ihre Transaktion unabhängig vom Transaktionsmodus eines Prozesses, der sie ausführt.") :

%Vor%

Diese Prozedur kann dann aufgerufen werden, ohne dass eine Transaktion ausgeführt wird:

%Vor%

Oder mit einer expliziten Transaktion:

%Vor%

Was sie nicht ansprechen, ist was passiert, wenn das gespeicherte Produkt:

  • schlägt mit einem Fehler fehl, lässt aber die Transaktion ablaufen
  • schlägt mit einem Fehler fehl, lässt jedoch die Transaktion nicht ablaufen
  • stößt auf einen Fehler, führt jedoch die Ausführung mit der Transaktion open
  • fort
  • stößt auf einen Fehler, führt jedoch die Ausführung der Transaktion mit dem Rollback der Transaktion
  • fort

Es gibt kein:

  • SET XACT_ABORT ON
  • @@ TRANCOUNT

irgendwo im kanonischen Beispiel.

Wenn ich es nicht besser wüsste, hätte ich gedacht, dass die Zeile:

  

Das folgende Beispiel zeigt die beabsichtigte Verwendung verschachtelter Transaktionen.

sollte eigentlich

lesen
  

Das folgende Beispiel zeigt, wie verschachtelte Transaktionen nicht verwendet werden.

Es sei denn, jemand kann Kopf oder Zahl von diesem BOL-Beispiel machen?

    
Ian Boyd 17.07.2012, 21:47
quelle

2 Antworten

26

Sie müssen den try-catch-Block mit der Transaktion verwenden. Wenn Sie also den Fehler in Ihrem catch-Block erhalten, können Sie Ihre Transaktion zurücksetzen.

Bitte beachten Sie den folgenden sql-Server-Code.

%Vor%     
Mayur Desai 01.11.2012 05:28
quelle
8
___ tag123sqlserver ___ Microsoft SQL Server ist ein relationales Datenbankverwaltungssystem (RDBMS). Verwenden Sie dieses Tag für alle SQL Server-Editionen, einschließlich Compact, Express, Azure, Fast-Track, APS (früher PDW) und Azure SQL DW. Verwenden Sie dieses Tag nicht für andere Arten von DBMS (MySQL, PostgreSQL, Oracle usw.). Verwenden Sie dieses Tag nicht für Probleme bei der Software- und mobilen Entwicklung, es sei denn, es steht in direktem Zusammenhang mit der Datenbank. ___ answer13171451 ___

Sie müssen den try-catch-Block mit der Transaktion verwenden. Wenn Sie also den Fehler in Ihrem catch-Block erhalten, können Sie Ihre Transaktion zurücksetzen.

Bitte beachten Sie den folgenden sql-Server-Code.

%Vor%     
___ answer 14729527 ___
%Vor%     
___ tag123storedprocedures ___ Eine Subroutine, die für Anwendungen verfügbar ist, die auf ein relationales Datenbanksystem zugreifen. ___ qstntxt ___

Mit Blick auf die SQL Server-Onlinedokumentation scheint Microsoft eine (falsche) Methode zur Verarbeitung verschachtelter Transaktionen in einer gespeicherten Prozedur :

  

Schachtelungstransaktionen

     

Explizite Transaktionen können verschachtelt werden. Dies dient hauptsächlich dazu, Transaktionen in gespeicherten Prozeduren zu unterstützen, die entweder von einem bereits in einer Transaktion ausgeführten Prozess oder von Prozessen ohne aktive Transaktion aufgerufen werden können.

Das Beispiel zeigt eine gespeicherte Prozedur, die eine eigene Transaktion startet ("Die Prozedur erzwingt ihre Transaktion unabhängig vom Transaktionsmodus eines Prozesses, der sie ausführt.") :

%Vor%

Diese Prozedur kann dann aufgerufen werden, ohne dass eine Transaktion ausgeführt wird:

%Vor%

Oder mit einer expliziten Transaktion:

%Vor%

Was sie nicht ansprechen, ist was passiert, wenn das gespeicherte Produkt:

  • schlägt mit einem Fehler fehl, lässt aber die Transaktion ablaufen
  • schlägt mit einem Fehler fehl, lässt jedoch die Transaktion nicht ablaufen
  • stößt auf einen Fehler, führt jedoch die Ausführung mit der Transaktion open
  • fort
  • stößt auf einen Fehler, führt jedoch die Ausführung der Transaktion mit dem Rollback der Transaktion
  • fort

Es gibt kein:

  • %code%
  • @@ TRANCOUNT

irgendwo im kanonischen Beispiel.

Wenn ich es nicht besser wüsste, hätte ich gedacht, dass die Zeile:

  

Das folgende Beispiel zeigt die beabsichtigte Verwendung verschachtelter Transaktionen.

sollte eigentlich

lesen
  

Das folgende Beispiel zeigt, wie verschachtelte Transaktionen nicht verwendet werden.

Es sei denn, jemand kann Kopf oder Zahl von diesem BOL-Beispiel machen?

    
___ tag123sqlserver2008r2 ___ Verwenden Sie dieses Tag für Fragen, die sich auf die Version 2008 R2 von Microsoft SQL Server beziehen. ___ qstnhdr ___ Wie rolle ich eine Transaktion in einer gespeicherten Prozedur zurück? ___
owolabi opeyemi jeleel 06.02.2013 12:50
quelle