Ich habe eine gespeicherte Prozedur erstellt und sehe einige Unterschiede zwischen meiner Methodik und denen meiner Kollegen.
Ich verwende SQL Server 2005
Meine gespeicherte Prozedur sieht so aus
%Vor%Und die Art und Weise, wie mein Kollege schreibt, sieht wie folgt aus:
%Vor% Hier ist der einzige Unterschied zwischen den beiden Methoden die Position von Begin TRAN
.
Laut mir sollte die Methode meines Kollegen nicht funktionieren, wenn eine Ausnahme auftritt, d. H.% Co_de% sollte nicht ausgeführt werden, da TRAN keinen Bereich in Methode 2 hat. Aber wenn ich versuchte, beide Methoden auszuführen, arbeiteten sie auf die gleiche Weise.
In Methode 1 befindet sich der Gültigkeitsbereich von TRAN außerhalb des try-Blocks, daher sollte er sowohl in try-Block als auch in catch-Block sichtbar sein und sollte laut der Scope-Methode der Programmierung funktionieren.
In Methode 2 ist der Geltungsbereich von TRAN innerhalb des Try-Blocks begrenzt, so dass Rollback
und Commit
innerhalb des try-Blocks auftreten sollten und Ausnahme auslösen sollte, wenn ein Rollback
mit keinem Rollback
im catch-Block existiert funktioniert auch perfekt.
Ich bin verwirrt darüber, wie TRANSACTION funktioniert. Ist es frei von Umfang?
Transaktionen sind nicht auf die Programmiersprachen beschränkt.
Transaktionen sind für die aktuelle Verbindung verschachtelt. Jeder BEGIN TRAN startet eine neue Transaktion und diese Transaktion endet jedes Mal, wenn ein COMMIT oder ROLLBACK aufgerufen wird, es spielt keine Rolle, wo in Ihrem gespeicherten Prozess dies ist.
Transaktionen sind verschachtelt für die aktuelle Verbindung. Jeder BEGIN TRAN startet eine neue Transaktion und das Die Transaktion endet, wenn ein COMMIT oder ROLLBACK heißt, es spielt keine Rolle wo in Ihrem gespeicherten Prozess ist dies.
nur hinzufügen, dass ROLLBACK "alle" offenen Transaktionen für die Verbindung beendet ...
Tags und Links sql sql-server database tsql