Время существования транзакций

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

  • Транзакцию, запущенную в среде CLR, необходимо зафиксировать или выполнить ее откат, иначе SQL Server сформирует ошибку при выходе из среды.

  • Внешнюю транзакцию нельзя зафиксировать или выполнить ее откат внутри кода CLR.

  • Попытка зафиксировать транзакцию, запущенную в другой процедуре, вызывает ошибку времени выполнения.

  • Попытка выполнить откат транзакции, запущенной в другой процедуре, приводит к зависанию транзакции (предотвращая выполнение любых других операций с побочными эффектами). Выполнение транзакции прекращается, пока код CLR не выйдет из области действия. Обратите внимание, что эта особенность может быть полезной при обнаружении ошибки в процедуре и необходимости убедиться, что работа транзакции полностью прекращена.

См. также

Основные понятия

Интеграция со средой CLR и транзакции