Я создал небольшую структуру ведения журналов, чтобы можно было легко вызывать хранимые процедуры, такие как spLog или spLogError.
Все хранимые процедуры и таблицы находятся в отдельной базе данных, называемой ведением журнала.
Теперькод, который я использую, выглядит следующим образом:
if OBJECT_ID('dbo.testLogProcLinkedServer') is not null
drop procedure dbo.testLogProcLinkedServer;
go
CREATE PROCEDURE [dbo].[testLogProcLinkedServer]
AS
BEGIN
set nocount on;
declare @msg nvarchar(max),
@dbId int = db_id();
begin try
declare @i int;
set @i = 1 / 0;
end try
begin catch
exec [MyLinkedServer].[Logging].dbo.spLogError @objectId = @@PROCID,
@databaseId = @dbId,
@message = N'Testing catch errors, check field ErrorMessage for more information.';
end catch
end
go
exec dbo.testLogProcLinkedServer;
Теперь дело в том, что ERROR_MESSAGE () не попадает в spLogError, это NULL.Но когда я удаляю MyLinkedServer (в моей среде разработки базы данных находятся на одном и том же сервере, поэтому я могу это сделать), ERROR_MESSAGE () становится доступным, и все работает как положено.
При поиске"tsql поймать связанный сервер" в Google.Я нахожу этот вопрос: Перехват ошибок через связанный сервер с серьезностью <20 </a>
Но главное отличие этого вопроса от меня заключается в том, что большинство тем ссылаются на обнаружение ошибок отудаленный вызов процедуры, но я не хочу отлавливать что-либо из удаленного вызова процедуры.Я хотел бы отправить ему свои данные об ошибках и написать соответствующую таблицу.
Может кто-нибудь указать мне, что вызывает это?