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