Добрый день.
Тест.
Подготовка данных:
Вызов локально:
Управление в блок catch не передается.
Результат: "Divide by zero error encountered".
Меняю способ вызова удаленной ХП:
Результат: catched.
Такое же поведение при вызове через openrowset/openquery.
Понимаю, что для первого примера можно добавить "set xact_abort on" для отлова ошибки.
Но все-таки, в чем разница? Почему при разных способах вызова ХП поведение try/catch разное.
Заранее спасибо!
Тест.
Подготовка данных:
-- Запуск на Linked-сервере create proc trycatch as select 1/ 0; go
Вызов локально:
begin try declare @cmd nvarchar( 4000 ); set @cmd = 'exec trycatch'; exec [MSSQL2012].master.sys.sp_executesql @cmd end try begin catch print 'catched' end catch
Управление в блок catch не передается.
Результат: "Divide by zero error encountered".
Меняю способ вызова удаленной ХП:
begin try exec ( 'exec trycatch' ) at [MSSQL2012] end try begin catch print 'catched' end catch
Результат: catched.
Такое же поведение при вызове через openrowset/openquery.
Понимаю, что для первого примера можно добавить "set xact_abort on" для отлова ошибки.
Но все-таки, в чем разница? Почему при разных способах вызова ХП поведение try/catch разное.
Заранее спасибо!