У меня есть блок catch try в моем sp с инструкцией insert в try. код ошибки проверки catch, если он является нарушением pk, если он затем обновляется. но иногда я получаю «Текущая транзакция не может быть зафиксирована и не может поддерживать операции, которые записываются в файл журнала. Откат транзакции.установить xact_abort и попытаться поймать вместе
Неопределенная транзакция обнаружена в конце партии. Сделка отменяется». поэтому я добавил xact_abort, но тогда я продолжаю получать «Счет транзакции после того, как EXECUTE указывает несоответствующее число операторов BEGIN и COMMIT». и я нашел это. http://www.ashishsheth.com/post/2009/08/14/Set-XACT_ABORT-ON-and-TryCatch-block-in-Sql-Server-2005.aspx
если это правда. будет ли мой код catch не запущен, если в моем блоке try произошла ошибка с xact_abort?
Извините, что я опоздал на вечеринку ... Я согласен с Майклом, и подвох блок «» выполняется до отката, если у вас есть XACT_ABORT включен. Самое смешное в том, что все, что вы делаете в блоке catch, все равно откатывается, поэтому может показаться, что вы даже не выполняете все, что там есть. Если вы поместите инструкцию select в блок CATCH, вы увидите, что она выплевывается в SSMS, даже если будет вызвана ошибка. – Eli