在同一台服务器上,我有两个数据库,比如说A数据库和B数据库。
当A数据库的某张表的某个字段被更新的话,马上触发更新触发器,
然后去更改B数据库的某几张表里的某个字段的值。
CREATE  TRIGGER upd_xhead  ON XHEAD
FOR UPDATE
ASdeclare @strCode nvarchar(50)
declare @strjzlb nvarchar(50)--set nocount on
--set  ansi_warnings on
--SET NOCOUNT on
--SET ANSI_NULLS offif update(f_jzlb)
   begin select  @strCode=code,@strjzlb=f_jzlb from inserted update OPENDATASOURCE('SQLOLEDB','DATA SOURCE=server;USER ID=sa;password=').PZGLXT.dbo.T_GCPZXMMaster
           set f_itemkubn=@strjzlb where f_itemcode=@strCode update OPENDATASOURCE('SQLOLEDB','DATA SOURCE=server;USER ID=sa;password=').PZGLXT.dbo.T_GCPZDATAMain
            set f_itemkubn=@strjzlb where f_itemcode=@strCode
--raiserror('code=%s;jzlb=%s',16,1,@strCode,@strjzlb)
   end但是一改A数据库的某个表的字段,它就提示这个错误。
请问各位大虾该怎么解决啊?
急啊,在线等~~~

解决方案 »

  1.   

    應該沒有問題的,參考了一下鄒老大的回復http://expert.csdn.net/Expert/topic/2835/2835706.xml?temp=.1959955  
      回复人:   j9988(j9988)    
       
      一.A.不用事务,关用SELECT   语句.是否可以分布式查询?  
       
            B.LINKSERVER   在做分布式更新事务时不能对本机操作.(就是不能环回分布式事务)  
       
            C.DBCC   TRACEON   (3604,   7300)--用跟踪看更详细错误信息.  
           
            D.下载MS提供的DTCPing.exe   分装在两台机上,按README说明来运行它.看出错信息.  
      http://download.microsoft.com/download/complus/msdtc/1.7/nt45/en-us/DTCPing.exe  
       
      二.两台机的MSDTC是否都打开了.  
       
      三.MSDTC设置是否正确.  
      1.打开命令提示,运行"net   stop   msdtc",然后运行"net   start   msdtc"。  
      2.转至"组件服务管理工具"。  
      3.浏览至"启动管理工具"。  
      4.选择"组件服务"。  
        a.展开"组件服务"树,然后展开"我的电脑"。  
        b.右键单击"我的电脑",然后选择"属性"。  
        C.在   MSDTC   选项卡中,确保选中了下列选项:   网络   DTC   访问  
      网络管理  
      网络事务  
              XA   事务  
        e.另外,"DTC   登录帐户"一定要设置为"NT   Authority\NetworkService"。  
      5.单击"确定"。这样将会提示您"MS   DTC   将会停止并重新启动。  
          所有的依赖服务将被停止。请按'是'继续"。单击"是"继续。  
      6.单击"确定"关闭"我的电脑"属性窗口。  
       
      四.  
      MSDTC依赖于RPC,RPC使用的端口是135,测试135端口是否打开.是否有防火墙?如果有先关了防火墙.  
      telnet   IP   135  
      如果是关闭的打开它.  
       
      五.  
      有的机由于各种原因),SQLOLEDB不能使用分布式事务,更改为"MSDASQL"   的ODBC方式联接.  
      使用RRAS而不是RAS.(控制面版--管理工具--远程服务管理器)  
      Check   whether   you   are   using   Remote   Access   Server   (RAS)   to   access   remote   servers.   If   so,   make   sure   that   you   have   implemented   Routing   RAS   (RRAS).   Linked   server   does   not   work   on   RAS   because   RAS   allows   only   one   way   communication.  
       
       
      七.检查你的两台服务器是否在同一个域中.  
      如果不在同一个域中,是否建立可信任联接.  
       
      八.如果是WIN2000,升级到SP4  
       
      九.升级MDAC到2.6以上,最好是2.8.  
       
      十.要安装SQL的最新补丁:   sp3a  
      '全部补丁的位置  
      http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=9032f608-160a-4537-a2b6-4cb265b80766  
       
      '应该安装的补丁sql   2000   sp3  
      http://download.microsoft.com/download/d/d/e/dde427eb-0296-4eac-a47c-d11a66b03816/chs_sql2ksp3.exe  
      

  2.   

    我找到原因了。
    因为是同一台服务器的两个数据库,所以不需要通过opendatasource方法打开数据库的。
    直接用数据库.表名就可以了。谢谢各位费心了~~
      

  3.   

    同一台服务器,直接用UPDATE DATABASE.DBO.TABLE SET 就可以了,不用搞链接的。