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


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

Область применения:SQL Server

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

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

  • Внешняя транзакция не может быть зафиксирована или откатена внутри кода СРЕДЫ CLR.

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

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