Transaktionslebensdauer
Gilt für:SQL Server
Es gibt einen wichtigen Unterschied zwischen Transaktionen, die in Transact-SQL gespeicherten Prozeduren gestartet wurden, und Transaktionen, die in verwaltetem Code gestartet wurden: ClR-Code (Common Language Runtime) kann den Transaktionsstatus beim Betreten oder Beenden eines CLR-Aufrufs nicht aufheben. Dieser Unterschied wirkt sich wie folgt aus:
Eine Transaktion, die in einem CLR-Frame gestartet wurde, muss zugesichert oder zurückgesetzt werden, sonst generiert SQL Server einen Fehler, wenn der Frame beendet wird.
Eine äußere Transaktion kann nicht innerhalb des CLR-Codes zugesichert oder zurückgesetzt werden.
Wenn für eine Transaktion, die nicht in derselben Prozedur gestartet wurde, ein Commit ausgeführt wird, wird ein Laufzeitfehler verursacht.
Ein Versuch, ein Rollback einer Transaktion auszuführen, die nicht in derselben Prozedur gestartet wurde, führt dazu, dass die Transaktion nicht mehr reagiert (wodurch verhindert wird, dass ein anderer nebeneffektierender Vorgang ausgeführt wird). Die Transaktion reagiert nicht mehr, bis der CLR-Code den Bereich verlässt. Dieses Verhalten kann nützlich sein, wenn Sie einen Fehler in Ihrer Prozedur erkennen und sicherstellen möchten, dass die gesamte Transaktion beendet wird.