因为我批量插入一些数据,触发器只有一条记录起作用
所以我改成了UPDATE tb
SET bh = XXXX
from tb a ,inserted i
where a.id=i.id 这样的内连接应该只更新刚才插入的数据,可是我却是全表更新。
如果用游标处理也不现实,速度太慢了

解决方案 »

  1.   

    UPDATE a
    SET bh = XXXX
    from tb a ,inserted i
    where a.id=i.id  
      

  2.   

    楼主你更新的语句是怎样的,就是触发时的update,不是触发器里的,如果你触发时的update是全表,那么这段肯定更新全表,另外楼主id是自增主键列吧!
      

  3.   


    declare @id int
    select @id=id from inserted 
    UPDATE tb
    SET bh = XXXX
    where id= @id 
      

  4.   


    UPDATE tb
    SET bh = XXXX
    from tb a ,inserted i
    where a.id=i.id  
    表示鸭梨!
      

  5.   

    UPDATE a SET bh = XXXX
    from tb a ,inserted i
    where a.id=i.id 
      

  6.   

    UPDATE a
    SET bh = 
     replace(Convert(varchar(10),a.ipdate,111),'/','')+
     right((select count(*)+1 from tb t5 where convert(varchar(10),t5.ipdate,120) = convert(varchar(10),ipdate,120))+100000,5)
    from tb a ,inserted i
    where a.id=i.id 真的更新了全表
      

  7.   


    我的ID是GUID的,测试表和实际中用的表都是GUID
      

  8.   

    完整的触发器代码
    ALTER TRIGGER [t_insert]
       ON  [dbo].[tb]
       AFTER INSERT
    AS 
    BEGINUPDATE a
    SET bh = 
     replace(Convert(varchar(10),a.ipdate,111),'/','')+
     right((select count(*)+1 from tb t5 where convert(varchar(10),t5.ipdate,120) = convert(varchar(10),ipdate,120))+100000,5)
    from tb a ,inserted i
    where a.id=i.id END