Ms Sql检查来自触发器的链接服务器连接检查

时间:2014-01-22 15:06:19

标签: sql sql-server triggers connection linked-server

我正在尝试创建一个触发器,它会将一些数据插入Ms Sql 2012中的链接服务器上的表中。我希望能够检查服务器连接是否处于活动状态,如果不是,那么我想要将消息记录在其中但不中止整个事务并回滚。我想要启动触发器的查询继续。

我尝试了这里描述的方法 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

1 个答案:

答案 0 :(得分: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块中没有代码,它将转到后续代码。