リンクサーバーから返されたエラーメッセージをキャプチャするにはどうすればよいですか?
例として、SQL Server ManagementStudioで次のコマンドを実行した場合:
BEGIN TRY
exec ('select * from xxx') at my_linked_server
END TRY
BEGIN CATCH
print 'ErrorNumber...'+ CAST(ERROR_NUMBER() as varchar)
print 'ErrorSeverity...'+ CAST(ERROR_SEVERITY() as varchar)
print 'ErrorState...'+ CAST(ERROR_STATE() as varchar)
print 'ErrorProcedure...'+ IsNull(ERROR_PROCEDURE(),'')
print 'ErrorLine...'+ CAST(ERROR_LINE() as varchar)
print 'ErrorMessage...'+ IsNull(ERROR_MESSAGE(),'')
END CATCH
次の結果が得られます。
リンクサーバー「my_linked_server」のOLEDBプロバイダー「MSDASQL」が「[Informix][InformixODBCドライバー][Informix]指定されたテーブル(xxx)がデータベースにありません。」というメッセージを返しました。ErrorNumber ... 7215 ErrorSeverity ... 17 ErrorState ... 1 ErrorProcedure ... ErrorLine ... 3ErrorMessage...リモートサーバー'my_linked_server'でステートメントを実行できませんでした。
SQLServerはOLEDBプロバイダーエラーを保存しますか?(デバッグのためにこの情報をキャプチャすると便利です。)