Время существования транзакций
Между транзакциями, запущенными в хранимых процедурах Transact-SQL и управляемом коде, имеется существенная разница: код CLR не может разбалансировать состояние транзакции при входе или выходе из вызывающей среды CLR. Необходимо учитывать следующие последствия этого факта.
Транзакцию, запущенную в среде CLR, необходимо зафиксировать или выполнить ее откат, иначе SQL Server формирует ошибку при выходе из среды.
Внешнюю транзакцию нельзя зафиксировать или выполнить ее откат внутри кода CLR.
Попытка зафиксировать транзакцию, запущенную в другой процедуре, вызывает ошибку времени выполнения.
Попытка выполнить откат транзакции, запущенной в другой процедуре, приводит к зависанию транзакции (мешая выполнению все других связанных операций). Выполнение транзакции прекращается, пока код CLR не выйдет из области действия. Обратите внимание, что эта особенность может быть полезной при обнаружении ошибки в процедуре и необходимости убедиться, что транзакция завершилась целиком.
См. также