Поделиться через


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

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

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

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

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

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