2012-11-09 47 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