如何捕获从链接服务器返回的错误信息?(How to capture error message re

2019-10-19 07:51发布

我怎样才能捕捉从链接服务器返回的错误信息?

举个例子,如果我在运行SQL Server Management Studio中下面的命令:

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

我得到如下结果:

OLE DB提供 “MSDASQL” 链接服务器 “my_linked_server” 返回消息 “[Informix的] [Informix ODBC驱动程序] [Informix的]指定的表(XXX)是未在数据库中。”。 ErrorNumber ... 7215 ... ErrorSeverity 17 ErrorState ... 1 ... ErrorProcedure ... ErrorLine 3的ErrorMessage ...无法远程服务器 'my_linked_server' 上执行语句。

是否SQL Server存储的OLE DB提供程序错误? (这将捕捉到调试这个信息是有用的。)

Answer 1:

我有同样的问题。 我发现了如何通过将尝试捕捉到链接服务器和获取回错误使用绕过它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


文章来源: How to capture error message returned from linked server?