我正在尝试创建一个触发器,它会将一些数据插入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
答案 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块中没有代码,它将转到后续代码。