0

我遇到了与这个问题类似的问题:TRY CATCH with Linked Server in SQL Server 2005 Not Working

我正在运行这个 try catch:

    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,因为我没有运行我自己的存储过程,我只运行一个简单的选择语句。我尝试过使用@@ERROR,但这也不适用于链接服务器。因为我得到的错误小于20,所以我遇到了这个问题:

如果远程存储过程调用严重性小于 20 的 RAISERROR,并且远程存储过程的范围在本地服务器上的 TRY 块内,则 RAISERROR 不会导致控制权传递给 TRY...CATCH 构造的 CATCH 块

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

我发现了这个问题:如何捕获从链接服务器返回的错误消息?也没有回答。

4

1 回答 1

0

我发现了如何通过将 try catch 传递给链接服务器并使用 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 回答