Dela via


Transaktionslivslängder

gäller för:SQL Server

Det finns en viktig skillnad mellan transaktioner som startats i Transact-SQL lagrade procedurer och transaktioner som startats i hanterad kod: CLR-kod (Common Language Runtime) kan inte balansera transaktionstillståndet vid in- eller utgående av ett CLR-anrop. Tänk på följande konsekvenser av den här skillnaden:

  • En transaktion som startas i en CLR-ram måste checkas in eller återställas, annars genererar SQL Server ett fel när ramen avslutas.

  • En yttre transaktion kan inte checkas in eller återställas i CLR-koden.

  • Ett försök att genomföra en transaktion som inte startats i samma procedur orsakar ett körningsfel.

  • Ett försök att återställa en transaktion som inte startats i samma procedur gör att transaktionen slutar svara (vilket förhindrar att någon annan sidoeffektåtgärd inträffar). Transaktionen upphör tills CLR-koden hamnar utanför omfånget. Det här beteendet kan vara användbart när du identifierar ett fel i proceduren och vill se till att hela transaktionen avslutas.