如何捕获从链接服务器返回的错误消息?
例如,如果我在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_server”的OLE DB提供程序“MSDASQL”返回消息“[Informix] [Informix ODBC Driver] [Informix]指定的表(xxx)不在数据库中。” ErrorNumber ... 7215 ErrorSeverity ... 17 ErrorState ...... 1 ErrorProcedure ... ErrorLine ... 3 ErrorMessage ...无法在远程服务器'my_linked_server'上执行语句。
SQL Server是否存储OLE DB提供程序错误? (捕获此信息以进行调试将非常有用。)
答案 0 :(得分: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,
@resultOUT=@result OUTPUT