2014-01-22 5 views
0

Я пытаюсь создать триггер, который будет вставлять некоторые данные в таблицу на linkedserver в Ms Sql 2012. Я хочу иметь возможность проверить, является ли соединение с сервером активным, и если это не значит, что я хочу зарегистрировать сообщение else, но не прервать всю транзакцию и откат. Я хочу, чтобы запрос, который запустил триггер, продолжился.Ms Sql Проверка связи соединения соединения с триггером

Я попробовал метод, описанный здесь How to test linkedserver's connectivity in TSQL Это делает вид работы, но ошибка все еще брошенный и моя транзакция откатывается с сообщением.

Ошибка была вызвана во время запуска триггера. Партия была прервана, и транзакция пользователя, если она есть, была отброшена назад.

Ошибка связана с чем-либо, связанным с сбитым связующим сервером, который вызывает откат, несмотря ни на что, и CATCH, похоже, не останавливает его.

Пример запуска:

CREATE TRIGGER [dbo].[TEST1_TRG] 
    ON [dbo].[Test1] 
    AFTER INSERT,DELETE,UPDATE 
AS 
BEGIN 
    SET NOCOUNT ON; 

    declare @srvr nvarchar(128), @retval int; 
    set @srvr = 'loopback'; 
    begin try 
     exec @retval = sys.sp_testlinkedserver @srvr; 
    end try 
    begin catch 
     set @retval = sign(@@error); 
    end catch; 
    print @retval 
END 

ответ

0

Ok попробовать этот

-- All your Code 

BEGIN TRY 
-- place Query which fires the trigger Here 
END TRY 
BEGIN CATCH 
    -- Check for the trigger error and if it is trigger error 
    -- do nothing 
    -- else raise an error 
END CATCH 

-- The subsequenet Code 

Теперь блок поймать получите сообщение об ошибке, но не будет никакого кода в поймать блок, он будет идти к последующему код.

+0

У меня нет контроля над вызывающими запросами, они могут поступать из любого места. Поэтому я действительно могу работать только в контексте моего триггера. – GimpArm

Смежные вопросы