【问题标题】:Ms Sql Check linkedserver connection check from triggerMs Sql Check 来自触发器的链接服务器连接检查
【发布时间】:2014-01-22 15:06:19
【问题描述】:

我正在尝试创建一个触发器,它将一些数据插入到 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

【问题讨论】:

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


    【解决方案1】:

    好的,试试这个

    -- 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块中没有代码,会转到后面的代码。

    【讨论】:

    • 我无法控制调用查询,它们可以来自任何地方。所以我真的只能在触发器的上下文中工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多