sql-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() 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 provider "MSDASQL" for linked server "my_linked_server" returned message "[Informix][Informix ODBC Driver][Informix]The specified table (xxx) is not in the database.". ErrorNumber...7215 ErrorSeverity...17 ErrorState...1 ErrorProcedure... ErrorLine...3 ErrorMessage...Could not execute statement on remote server 'my_linked_server'.



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

关于sql-server - 如何捕获从链接服务器返回的错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2168207/

相关文章:

sql-server - 使用 SQL Server 输出编码为 UTF-8 的 XML 文件

inheritance - TypeScript 中的自定义错误类

scala - 如何使用 Squeryl 在 Lift 中实际处理 List[FieldError]

node.js - 在 Sequelize/Node JS 中如何发送 TIME 数据类型的数据

sql - 分组总和()按灵活间隔分区

mysql - 如何使用 SQL Server 链接服务器在 SQL Server 和 MySQL 之间同步数据

oracle11g - 使用四部分名称访问 Oracle DB 作为 SQL Server 链接服务器时出现无效的列定义错误

sql-server - 在 SQL Server 中使用链接服务器有哪些缺点?

java - 制作主键列 varchar(max) 的替代方法

jquery - 在提交jquery上添加适当的错误消息