リンク サーバーでストアド プロシージャを実行するときに発生する 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, Level 16, State 1, Procedure RaiseError, Line 13 An error'
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
私の質問は、リンク サーバー ストアド プロシージャの実行時に生成されたエラーをキャッチできますか?
前もって感謝します!