你的这个想法是不能实现的触发器仅在数据发生变化时才触发,这个变化指用修改了触发器所在对象的数据,所以必须对视图进行insert/update/delete才会触发器源表数据的变化不会触发器,因为视图是在查询时取数的,它本身不保存数据,所以源表数据的变化只是在视图查询时才反应给视图,这个根本不会触发触发器,也就实现不了你的要求.

解决方案 »

  1.   

    可以在远程表里建触发器的.不过要求你的两台电脑都要开着msdtc服务即系统服务里面的:Distributed Transaction Coordinator
      

  2.   

    这个是我的远程数据库的表
    OPENROWSET('SQLOLEDB', 
          'DRIVER={SQL Server};SERVER=192.168.1.172;UID=id;PWD=id', 
          cerp_app.dbo.SAL_InterPackList) a我如何才能建立这个表的触发器比如我的目标表是本地的mem.dbo.xxx
      

  3.   

    目标库是10.1.1.2
    查询分析器连接到远程服务器来创建触发器
    create TRIGGER SAL_InterPackList_iud ON [dbo].SAL_InterPackList
    for  insert ,delete ,update
    AS
    declare @expr1 varchar(200)
    set @expr1 = 'OPENROWSET('SQLOLEDB', 
          'DRIVER={SQL Server};SERVER=10.1.1.2;UID=id;PWD=id', 
          mem.dbo.xxx)'
    select Account_code,Account_name into #i from inserted
    select Account_code,Account_name into #d from deleted
    exec('delete from'+ @expr1+' where exists(select * from #d where Account_code='+ @expr1+'.cCusCode)')
    exec('insert into '+@expr1+' (cCusCode,cCusName) select * from #i')
    go
      

  4.   

    create TRIGGER SAL_InterPackList_iud ON [dbo].SAL_InterPackList
    for  insert ,delete ,update
    AS
    declare @expr1 varchar(200)
    set @expr1 = 'OPENROWSET(''SQLOLEDB['', 
          ''[DRIVER={SQL Server};SERVER=10.1.1.2;UID=id;PWD=id'', 
          mem.dbo.xxx)'
    select Account_code,Account_name into #i from inserted
    select Account_code,Account_name into #d from deleted
    exec('delete a from '+ @expr1+' a where exists(select * from #d where Account_code=a.cCusCode)')
    exec('insert into '+@expr1+' (cCusCode,cCusName) select * from #i')
    go