Могу ли я запустить SQL в отдельной транзакции, во время транзакции - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь создать стандартное ведение журнала для хранимых процедур наряду с нашей стандартной обработкой ошибок.Я хочу вызвать хранимую процедуру в начале sproc для входа в таблицу, которую она запустила, и вызвать хранимую процедуру в конце, чтобы записать, что она успешно завершена.Я также хочу вызвать хранимую процедуру из обработчика ошибок, чтобы записать сообщение об ошибке и номер ошибки / номер.

Хранимая процедура может иметь свою собственную транзакцию, или ее вызывающий стек может начать транзакцию, или может не быть открытой транзакции.Я не хочу, чтобы какой-либо из моих вызовов к процедурам регистрации откатывался вообще, независимо от того, что происходит в основной транзакции.т. е. обработка хранимых процедур ведения журнала должна быть полностью отделена от обработки основной обработки.

Возможно ли выполнить какой-либо SQL, как если бы он находился в отдельном сеансе во время транзакции?Какой самый простой способ добиться этого?

Кстати, я не могу использовать xp_cmdshell, иначе я бы обработал вызов sqlcmd.

Спасибо,

Отметить

1 Ответ

0 голосов
/ 11 февраля 2019

То, что вы описываете - это вложенные транзакции.Однако вложенные транзакции не являются реальными.https://www.sqlskills.com/blogs/paul/a-sql-server-dba-myth-a-day-2630-nested-transactions-are-real/ Вы должны были бы выполнить регистрацию в другом контексте.Поскольку вы находитесь в хранимой процедуре, вы должны будете использовать динамический sql в своем коде регистрации, чтобы это работало.

...