【发布时间】: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