2014-01-22 24 views
0

我试图创建一个触发器,它会插入一些数据到一个表上linkedserver在MS SQL 2012年我希望能够以检查服务器连接处于活动状态,如果连接检查它不是那么我想在其他地方记录消息,但不能中止整个事务并回滚。我想要启动触发器的查询继续。的Sql女士入住linkedserver从触发

我试过这里描述的方法 How to test linkedserver's connectivity in TSQL 这样做的工作,但错误仍然抛出,我的事务回滚消息。触发器执行过程中引发

错误。该批次已被中止,并且用户事务(如果有的话)已被回滚。

将引发错误的涉及击落linkedserver导致回滚无论在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

好的尝试这种

-- 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 

现在catch块将得到错误,但会出现在catch块没有代码,它会去以后码。

+0

我无法控制调用查询,它们可以来自任何地方。所以我真的只能在我的触发器内工作。 – GimpArm