Freigeben über


Lebensdauer von Transaktionen

Gilt für: SQL Server

Es gibt einen wichtigen Unterschied zwischen Transaktionen, die in gespeicherten Transact-SQL-Prozeduren gestartet wurden, und den in verwaltetem Code gestarteten Prozeduren: 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.

  • 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.

  • 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. Dies kann hilfreich sein, wenn Sie innerhalb der Prozedur einen Fehler erkennen und sicherstellen möchten, dass die ganze Transaktion beendet wird.

Weitere Informationen

CLR-Integration und -Transaktionen