Как я могу перехватить сообщение об ошибке, возвращаемое со связанного сервера?
Например, если я запускаю следующую команду в 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? (Было бы полезно зафиксировать эту информацию для отладки.)