触发器 操作链接服务器库的问题
CREATE TRIGGER trg_inst ON [dbo].[key_info]
FOR update
AS
if update(key_inst)
begin
set xact_abort on
insert into [172.31.2.186].crmeasy.dbo.CC_SellOrder (OrderId,OrderStatus) values('21321','1')
set xact_abort off
end
在查询分析器里面执行insert into [172.31.2.186].crmeasy.dbo.CC_SellOrder (OrderId,OrderStatus) values('21321','1')很正常,但是在运行时提示:
其他用户已经修改了该表或视图的内容;您正在修改的数据库行在数据库中已不存在。数据库错误:‘Microsoft][ODBC SQL Server Driver][SQL Server]服务器‘CTC’上MSDTC不可用……’
问题点数:20、回复次数:5Top
1 楼Chiff(~o~)回复于 2005-08-23 15:45:25 得分 10
这是因为触发器会自动开始一个隐式事务,而链接服务器的操作如果放在事务中运行的话,需要:
1、保证你的Distributed transaction coordinator服务是启动的。(DTC)
2、可能还需要为两个服务器安装SQL的SP补丁。Top
2 楼PonderZhang(雨中的鸟)回复于 2005-08-23 16:25:24 得分 0
我的服务器的DTC服务已经启动了呀?那怎么办?对方的服务器我没有权限管理。服务器都是sp3了,还要安装什么?Top
3 楼wvivw(疾风)回复于 2005-08-23 16:25:28 得分 5
exec sp_addlinkedserver '[172.31.2.186]'
exec sp_addlinkedsrvlogin '172.31.2.186','false',NULL,'SQLUser','Password'
-- 数据库,'false'这个不要写就这个就好,null空, sqluser 连接数据库用户名,密码
--然后再执行下面的语句看看
insert into [172.31.2.186].crmeasy.dbo.CC_SellOrder (OrderId,OrderStatus)
values('21321','1')
--经过测试,通过
给分啊,我回复好多个,都没有给分,俺怎么也辛苦老长时间Top
4 楼wlhtake(正在调试)回复于 2005-08-23 17:12:59 得分 5
楼上的,人家问的是触发器中使用,你答非所问当然没分了
估计是sp3没有解决的bug, sp4出了试试看Top
5 楼wvivw(疾风)回复于 2005-08-24 12:38:11 得分 0
他的触发器,不就是因为,没有连接上数据库么,所以我告诉他怎么可以连接啊,解决了问题的Top




