SQL SERVER的触发器不能像oracle 那样可以对单条的操作编制触发器,你得触发器
由于是操作多条 update table1 set field1='c'所以在
set field1=inserted.field中就会返回多个纪录,而update是不是到该去哪一个纪录的  

解决方案 »

  1.   

    SQL SERVER触发器是单条执行的,即当你执行update table1 set field1='c'时,每更新table1的一条记录,就会执行触发器脚本。
    得不到所需的结果,估计是你的触发器脚本有问题,你再仔细看看吧。
    要不然就把你所想要得到的结果和实际得到的结果贴出来。
    你先这样试试:    create trigger Upd_table1
        on table1
        for update
        as
        Begin
          update table2 set feild1=inserted.field1 from deleted,insrerted where 
              deleted.field1=table2.field1
        end
      

  2.   


    Oracle可以设定触发的方式,行还是批。
    SQLServer中的触发方式,按照本次触发的影响的数据放入 inserted, deleted这是两张临时表,是集合。
      

  3.   

    Thank you!
    希望和你们成为朋友:
    EMAIL 
    chengjunfong123
      

  4.   

    SQL server 中的触发器是按批进行的。这可以通过在触发器中对inserted和deleted两个伪表中记录条数进行验证的。所以你的trigger中写法上存在一些问题:
    update table2 set feild1=inserted.field1 from deleted where 
              deleted.field1=table2.field1
    这句话中的from子句中没有出现inserted这个表,inserted.field1是一个不确切的值,系统将无法更改table2.field1的值,改成下面的形式就可以了,
    update table2 set feild1=inserted.field1 from deleted,inserted where 
              inserted.PK_field=deleted.PK_field and deleted.field1=table2.field1
    PK_field 为表table1中的主键列,一般情况下,不应该update一个表的主键。
        
      

  5.   

    我感觉你的触发器脚本有问题,可以这样:
    create trigger Upd_table1
    on table1
    for update
    as
    Begin
    declare @field char(10)
    select @field=field1 from inserted
    update table2 
    set feild1=@field  
    where table2.field1=deleted.field1
    end
    另外,触发器的机制是单条的执行方式.