Я пытаюсь отловить ошибку sql, возникающую при выполнении хранимой процедуры на связанном сервере. Оба сервера работают под управлением SQL Server 2005.
Чтобы доказать проблему, я создал хранимую процедуру на связанном сервере с именем Raise error, которая выполняет следующий код:
RAISERROR('An error', 16, 1);
Если я выполняю хранимую процедуру непосредственно на связанном сервере, используя следующий код, я получаю набор результатов с ошибкой '16', как и ожидалось (т. Е. Код входит в блок catch):
BEGIN TRY
EXEC [dbo].[RaiseError];
END TRY
BEGIN CATCH
DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int;
SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY();
SELECT @ErrMsg, @ErrSeverity;
END CATCH
Если я запускаю следующий код на локальном сервере для выполнения хранимой процедуры на связанном сервере, SSMS выдает мне сообщение «Запрос завершен с ошибками», .Msg 50000, Уровень 16, Состояние 1, Процедура RaiseError, Строка 13
Ошибка '
BEGIN TRY
EXEC [Server].[Catalog].[dbo].RaiseError
END TRY
BEGIN CATCH
DECLARE @SPErrMsg nvarchar(4000), @SPErrSeverity int;
SELECT @SPErrMsg = ERROR_MESSAGE(), @SPErrSeverity = ERROR_SEVERITY();
SELECT @SPErrMsg, @SPErrSeverity;
END CATCH
Мой вопрос: можно ли отловить ошибку, сгенерированную при выполнении хранимой процедуры на связанном сервере?
Заранее спасибо!