试试这个:create trigger dbo.trigger_tb_demo_update
on DB1.dbo.TB_Demo
for update
asif update(str1)
begin
   update DB2.dbo.TB_Demo
   set str1 = i.str1
   from DB2.dbo.TB_Demo t
   inner join inserted i
           on t.SJHM = i.SJHM   
endif update(str2)
begin
   update DB2.dbo.TB_Demo
   set str2 = i.str2
   from DB2.dbo.TB_Demo t
   inner join inserted i
           on t.SJHM = i.SJHM   
endif update(str3)
begin
   update DB2.dbo.TB_Demo
   set str3 = i.str3
   from DB2.dbo.TB_Demo t
   inner join inserted i
           on t.SJHM = i.SJHM   
endgo

解决方案 »

  1.   

    另外,如果你的db1 和db2 不在同一个服务器上,那么还得先建立连接服务器:--建立链接服务器,通过@datasrc指定数据源,适合链接其他多种数据库
    EXEC master.dbo.sp_addlinkedserver @server = N'Link',
                                       @srvproduct='ms', 
                                       @provider=N'SQLNCLI',                                    
                                       @datasrc=N'远程ip地址,端口'EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'Link',
                                        @useself=N'False',
                                        @locallogin=NULL,
                                        @rmtuser=N'用户名',
                                        @rmtpassword='密码'
      
                                        
    --查询远程表
    select * 
    from [Link].远程数据库名.dbo.表
    --把本地表的数据,复制到远程表
    insert into [Link].远程数据库名.dbo.表(列的列表)
    select 列
    from 本地表
      

  2.   

    我想过这样做,但是表字段太多了,很多IF判断会不会造成性能下降,直接用以下会不会更好些,不判断,只要有更新,全部更新,这个执行速度也没什么问题,但我还在想有没有更好的办法或更高效的方法
    CREATE TRIGGER [dbo].[TRI_Synchro_update]
    on DB1..TB_Demo for update
    as
    begin
      begin tran
         update DB2..TB_Demo set Str1=b.Str1,Str2=b.Str2,Str3=b.Str3 from DB2..TB_Demo as a inner join Inserted as b on a.sjhm=b.sjhm 
      commit tran
    end
      

  3.   


    呵呵,可以,你写的是对的,不过不需要事务,因为触发器本来就是在相应的触发语句的事务中的,这样就行:
    CREATE TRIGGER [dbo].[TRI_Synchro_update]
    on DB1..TB_Demo for update
    as
    begin     update DB2..TB_Demo set Str1=b.Str1,Str2=b.Str2,Str3=b.Str3 
         from DB2..TB_Demo as a 
         inner join Inserted as b on a.sjhm=b.sjhm 
    end
      

  4.   

    1楼的trigger是正解了,其实这种业务逻辑写在客户端程序即可,没有必要写在trigger中,容易造成效能降低和维护性不佳的问题