日期:2014-05-18  浏览次数:20474 次

触发器问题!!!
192.168.0.1上,打开企业管理器   ->   (local)(Windows   NT)   ->   安全性   ->   连接服务器   ->   右键   ->   新建连接服务器   ->   常规   ->   连接服务器:Link2   ->   其它数据源   ->   Microsoft   OLE   DB   Provider   for   SQL   Server   ->   数据源:192.168.0.2(也可用机器名)   ->   安全性   ->   用此安全上下文进行   ->   输入远程登录用户名和密码。

然后我在192.168.0.1的A表上做了个触发器,判断如果A表有新记录,则把新记录插入192.168.0.2上的一个表B里(怎么判断是新记录?表A里以前有很多数据。)

但是我测试,insert   一条语句后,就提示出错:
---------------------------
服务器:   消息   8501,级别   16,状态   3,过程   Checks,行   5
服务器   'NMCOVICS-0076 '   上的   MSDTC   不可用。
这个是什么错误!!?
------------------------------

1,我用触发器的时候怎么能光把新插入的记录拿到B表里?
2,这个错误怎么解决!

Help!!!

------解决方案--------------------
create trigger t_test on test
for insert
as
set XACT_ABORT on
--启动远程服务器的MSDTC服务
exec master..xp_cmdshell 'isql /S "xz " /U "sa " /P " " /q "exec master..xp_cmdshell ' 'net start msdtc ' ',no_output " ',no_output

--启动本机的MSDTC服务
exec master..xp_cmdshell 'net start msdtc ',no_output

--进行分布事务处理,如果表用标识列做主键,用下面的方法
BEGIN DISTRIBUTED TRANSACTION
delete from openrowset( 'sqloledb ', 'xz '; 'sa '; ' ',test.dbo.test)
where id in(select id from inserted)

commit tran
go
------解决方案--------------------
控制面板-管理工具-服务
将这个DTC服务打开
Distributed Transaction Coordinator

这个服务是进行分布式事务必备的