【发布时间】:2012-05-22 14:54:25
【问题描述】:
我有一个名为MyTable 的表,我在其上定义了一个触发器,如下所示:
CREATE TRIGGER dbo.trg_Ins_MyTable
ON dbo.MyTable
FOR INSERT
AS
BEGIN
SET NOCOUNT ON;
insert SomeLinkedSrv.Catalog.dbo.OtherTable
(MyTableId, IsProcessing, ModifiedOn)
values (-1, 0, GETUTCDATE())
END
GO
每当我尝试在 MyTable 中插入一行时,我都会收到以下错误消息:
消息 3910,第 16 级,状态 2,第 1 行 另一个会话正在使用事务上下文。
我已将 SomeLinkedSrv 正确定义为链接服务器(例如,select * from SomeLinkedSrv.Catalog.dbo.OtherTable 工作正常)。
如何避免错误并成功插入记录+执行触发器?
【问题讨论】:
-
SomeLinkedSrv.Catalog.Dbo.OtherTable 上是否也有触发器?
-
@Gratzy - 不,
OtherTable没有定义触发器 -
它是否发生在显式事务中?是否在两台服务器上都打开了 DTC?
-
您是否尝试过将其作为触发器而不是触发器来实现?您对原始插入使用什么类型的事务?你有没有考虑过在本地记录这个并使用后台进程来更新远程服务器(这样远程服务器不会使主事务复杂化,并且主事务不必等待远程操作)。
-
@Gratzy 目前我正在我的开发机器上测试它;我已连接到本地 SQLSserver 实例,并且链接服务器指向同一实例。 MSDTC 正在运行。
标签: tsql triggers sql-server-2008-r2 linked-server