Vidas úteis de transação
Há uma diferença importante entre as transações iniciadas nos procedimentos armazenados Transact-SQL e aquelas iniciadas no código gerenciado: o código CLR (common language runtime) não pode desequilibrar o estado da transação na entrada ou saída de uma invocação CLR. Esteja ciente das seguintes implicações dessa diferença:
Uma transação iniciada em um quadro CLR precisa ser confirmada ou revertida ou o SQL Server gerará um erro quando o quadro for fechado.
Uma transação externa não pode ser confirmada ou revertida no código CLR.
Uma tentativa de confirmar uma transação não iniciada no mesmo procedimento causa um erro em tempo de execução.
Uma tentativa de reverter uma transação não iniciada no mesmo procedimento causa a paralisação da transação (impedindo a ocorrência de qualquer outra operação como efeito colateral). A transação é descontinuada até que o código CLR saia do escopo. Observe que isso pode ser útil quando você detecta um erro em seu procedimento e deseja verificar se a transação inteira é finalizada.