0

この質問と同様の問題があります。SQLServer2005でリンクサーバーを使用してキャッチを試してください。

私はこのtrycatchを実行しています:

    Declare @command nvarchar(100)
    SET @command = 'SELECT column FROM table'
    BEGIN TRY
        BEGIN TRY
            exec ' + @Server_Name + @DB_name + '.dbo.sp_executesql @command
    END TRY
    BEGIN CATCH
        PRINT EXCEPTION
    END CATCH

独自のストアドプロシージャを実行していないため、使用できないと思いRAISEERRORます。単純なselectステートメントのみを実行しています。使用してみまし@@ERRORたが、リンクサーバーでも機能しません。取得するエラーは20未満であるため、次の問題が発生します。

リモートストアドプロシージャが重大度20未満のRAISERRORを呼び出し、リモートストアドプロシージャのスコープがローカルサーバーのTRYブロック内にある場合、RAISERRORによって制御がTRY…CATCH構造のCATCHブロックに渡されることはありません。

http://msdn.microsoft.com/en-us/library/ms191515.aspx

私はこの質問を見つけました:リンクされたサーバーから返されたエラーメッセージをキャプチャする方法は?どちらも答えられていません。

4

1 に答える 1

0

リンクされたサーバーにtrycatchを渡し、OUTPUTパラメーターを使用してエラーを返すことで、これを回避する方法を見つけました。例えば:

SET @command = '
BEGIN TRY
    exec (''select * from xxx'') 
    SELECT @resultOUT = @@ERROR
END TRY
BEGIN CATCH
    SELECT @resultOUT = @@ERROR
END CATCH'
SET @ParmDefinition = N'@resultOUT nvarchar(5) OUTPUT'
exec my_linked_server.sp_executesql 
    @command, 
    @ParmDefinition, 
    @resultOUT=@result OUTPUT
于 2012-11-19T21:18:06.650 に答える