Durées de vie des transactions
Il existe une différence importante entre des transactions démarrées dans des procédures stockées Transact-SQL et celles démarrées dans du code managé : le code CLR (Common Language Runtime) ne peut pas déséquilibrer l'état des transactions lors de l'entrée ou de la sortie d'un appel au CLR. Soyez conscient des implications d'une telle différence :
Une transaction démarrée à l'intérieur d'une trame CLR doit être validée ou annulée ; dans le cas contraire, SQL Server génère une erreur à la sortie de la trame.
Une transaction externe ne peut pas être validée ni annulée au sein du code CLR.
Une tentative de validation d'une transaction non démarrée dans la même procédure provoque une erreur d'exécution.
Une tentative d'annulation d'une transaction non démarrée dans la même procédure provoque le blocage de la transaction (ce qui empêche toute opération collatérale de se produire). La transaction cesse jusqu'à ce que le code CLR soit hors de portée. Notez que cela peut être utile lorsque vous détectez une erreur à l'intérieur de votre procédure et souhaitez vous assurer que la transaction entière se termine.