Lebensdauer von Transaktionen
Es gibt einen wichtigen Unterschied zwischen Transaktionen, die in gespeicherten Transact-SQL-Prozeduren gestartet werden, und Transaktionen, die in verwaltetem Code gestartet werden: CLR-Code (Common Language Runtime) kann den Transaktionsstatus bei Eintritt oder Verlassen eines CLR-Aufrufs nicht aus dem Gleichgewicht bringen. Dieser Unterschied wirkt sich wie folgt aus:
Für eine in einem CLR-Rahmen gestartete Transaktion muss ein Commit oder ein Rollback ausgeführt werden, da SQL Server sonst beim Verlassen des Rahmens einen Fehler generiert.
Für eine äußere Transaktion kann im CLR-Code kein Commit oder Rollback ausgeführt werden.
Wenn für eine Transaktion, die nicht in derselben Prozedur gestartet wurde, ein Commit ausgeführt wird, wird ein Laufzeitfehler verursacht.
Wenn für eine Transaktion, die nicht in derselben Prozedur gestartet wurde, ein Rollback ausgeführt wird, reagiert die Transaktion nicht mehr (was dazu führt, dass keine anderen Vorgänge mit Nebenwirkungen mehr ausgeführt werden). Die Transaktion reagiert nicht mehr, bis der CLR-Code den Bereich verlässt. Dies kann hilfreich sein, wenn Sie innerhalb der Prozedur einen Fehler erkennen und sicherstellen möchten, dass die ganze Transaktion beendet wird.