Sql server 如何捕获从链接服务器返回的错误消息?

Sql server 如何捕获从链接服务器返回的错误消息?,sql-server,error-handling,linked-server,Sql Server,Error Handling,Linked Server,如何捕获从链接服务器返回的错误消息 例如,如果在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(

如何捕获从链接服务器返回的错误消息

例如,如果在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
我得到以下结果:

链接服务器my_linked_服务器的OLE DB提供程序MSDASQL返回消息[Informix][Informix ODBC Driver][Informix]指定的表xxx不在数据库中。。 错误号码…7215 错误严重性…17 错误状态…1 错误程序。。。 错误线路…3 ErrorMessage…无法在远程服务器“我的链接服务器”上执行语句


SQL Server是否存储OLE DB提供程序错误?捕获此信息以进行调试将非常有用。

我也遇到了同样的问题。我通过将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

@jjj-这可能会同样落入开发人员的竞技场。这个问题来自昨天,没有答案。。如果我能提供一些有用的东西,我会的