openrowset与触发器:为什么这个openrowset函数在查询分析器可以,而在触发器不行?

imur03 imur03 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
现有电脑A、B,上面的数据库分别dbA(表tbA)、dbB(表tbB),其中表tbA与tbB完全一样。
表tbA的结构:
id int;
name nvarchar(50)

现在A机的查询分析器执行:
select * from openrowset('sqloledb','B' ; 'sa' ; '' , dbB.dbo.tbB )

insert into openrowset('sqloledb','B' ; 'sa' ; '' , dbB.dbo.tbB) values(10,'lyw')

上面两个命令时对的。但是在A机的数据库dbA上的表tbA上建立触发器insert_trig1:
CREATE TRIGGER insert_trig1 ON [dbo].[tbA]
FOR INSERT
AS
insert into openrowset('SQLOLEDB','B' ; 'sa' ; '' , dbB.dbo.tbB ) select * from inserted

当执行insert into tbA values(1,'abc')时,等了很久(N秒),报错:
服务器: 消息 7391,级别 16,状态 1,过程 ins_trig1,行 4
该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]

怎么办?请教请教!
...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
imur03
MS-SQL Server 34,876 成员 254,635 内容