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.