Quantcast
Channel: SQL.ru: Microsoft SQL Server
Viewing all articles
Browse latest Browse all 7251

Разница при работе с linked-сервером

$
0
0
Добрый день.
Тест.
Подготовка данных:
-- Запуск на 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 разное.
Заранее спасибо!

Viewing all articles
Browse latest Browse all 7251

Trending Articles