2012-11-09 48 views
0

我有一个类似的问题,这个问题:TRY CATCH with Linked Server in SQL Server 2005 Not Working捕获错误<20

我跑这个尝试捕捉:

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,我碰到这个问题:

如果远程存储过程调用RAISERROR与严重程度小于 20和远程存储过程是一个try块中作用域的 地方服务器,RAISERROR不会导致控制传递到TRY ... CATCH的CATCH 块构建

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

我发现这个问题:How to capture error message returned from linked server?尚未回答Ë ither。

回答

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, 
    @[email protected] OUTPUT