如下触发器:CREATE TRIGGER upt_DDATE ON TB1
for INSERT,UPDATE
ASIF   EXISTS(select 1 from  INSERTED   where   AA is not null)
   BEGIN   update INSERTED
   set INSERTED.DDATE=TB2.maxdate
   from INSERTED,TB2
   where INSERTED.ccode=TB2.ccode   END 提示错误: 不能更新逻辑表 INSERTED 和 DELETED。

解决方案 »

  1.   

    CREATE TRIGGER upt_DDATE ON TB1 
    for INSERT,UPDATE 
    AS IF  EXISTS(select 1 from  INSERTED  where  AA is not null) 
      BEGIN   update TB1
      set DDATE=TB2.maxdate 
      from INSERTED I,TB2 
      where I.ccode=TB2.ccode   END 
      

  2.   

    INSERTED 是触发器的虚表,不能删改操作
    说说你的需求
      

  3.   

    更新inserted  ?为什么?
      

  4.   

    CREATE TRIGGER upt_DDATE ON TB1 
    for INSERT,UPDATE 
    AS 
      update TB1
      set TB1.DDATE=TB2.maxdate 
      from INSERTED,TB2 
      where INSERTED.ccode=TB2.ccode 
        and TB1.ccode=INSERTED.ccode
        AND inserted.AA is not nullgo理解错了,改为
      

  5.   

    1楼的意见很重要应该增加
    if not update(DDATE)
    判断防止无限触发
      

  6.   


    http://topic.csdn.net/u/20081005/11/57061a18-c234-40ee-ba4b-1f4c3bc7f09a.html?48776看看这个就知道海爷有多厉害。
      

  7.   

    需求描述:材料领用单   主表 TB1 (ID,单据日期 DDATE,...)  
                 子表 TB2 (ID,材料编码 CODE,领用人 CPERSON,...,最近领用日期 MAXDATE)
               (主表子表ID联接)要求在录入材料领用单后,保存自动根据以前记录填写(子表 TB2 最近领用日期 MAXDATE)字段
      

  8.   

    即根据(材料编码 CODE,领用人 CPERSON)相同来更新(最近领用日期 MAXDATE)
      

  9.   

    IF  EXISTS(select 1 from  INSERTED  where  AA is not null)这样也行?
    select 1 from  INSERTED  where  AA is not null需改成select 1 * from  INSERTED  where  AA is not null少了字段。
      

  10.   

    select 1 from  INSERTED  where  AA is not null是不是要改成 select top 1 * from  INSERTED  where  AA is not null
      

  11.   


    CREATE TRIGGER upt_DDATE ON TB2 
    after INSERT
    AS   update TB2
      set MAXDATE=max(b.MAXDATE) 
      from INSERTED i,TB2 b
      where i.code=b.code 
        AND i.CPERSON=b.CPERSON go也可以在插入时就指定maxdate
    insert tb2 select @col1,@col2,max(maxdate) from tb2 where code= ... and CPERSON =...
      

  12.   

    ht1258这样写好像还是全表更新,能否做到只是INSERTED的记录更新?谢谢!update TB1
      set TB1.DDATE=TB2.maxdate 
      from INSERTED,TB2 
      where INSERTED.ccode=TB2.ccode 
        and TB1.ccode=INSERTED.ccode
        AND inserted.AA is not null
      

  13.   


    CREATE TRIGGER upt_DDATE ON TB1 
    after INSERT
    AS   update TB1
      set ddate=max(b.MAXDATE) 
      from INSERTED i,TB2 b,tb1 a
      where i.code=b.code 
        AND i.CPERSON=b.CPERSON 
    and a.code=b.code AND a.CPERSON=b.CPERSON go
      

  14.   

    需要查看填写单据时某人领用谋物品的最近一次的日期,所以每次只能更新本次记录,以前的记录不能更改。
    日期最好还是取主表的(单据日期 DDATE)
      

  15.   

    测试了一下,还是把前面的记录都一起更新了,而不是只更新当前插入的记录啊!!??例:VIEW1 (最近日期记录视图)
    CODE  CPERSON   MAXDATE
    0101    A      2009-09-01
    0101    B      2009-09-03
    0102    A      2009-09-08TABLEA
    ID     CODE  CPERSON   QTY   --DDATE (触发器更新)00001  0101    A       10    --2009-09-0800002  0101    B       20    --2009-09-01VIEW1 (最近日期记录视图)
    CODE  CPERSON   MAXDATE
    0101    A      2009-09-10
    0101    B      2009-09-13TABLEAID    CODE  CPERSON   QTY   --DDATE (触发器更新)00003  0101    A       30    --2009-09-1000004  0101    B       20    --2009-09-13
    能够做到只触发更新当前的插入或更新记录吗?结果如下:
    TABLEA ID    CODE  CPERSON   QTY   --DDATE (触发器更新)
    00001  0101    A       10    --2009-09-08
    00002  0101    B       20    --2009-09-01
    00003  0101    A       30    --2009-09-10
    00004  0101    B       20    --2009-09-13
      

  16.   

    当插入记录时根据CODE和CPERSON字段相同来用触发器更新本条记录的DDATE日期另外一个视图记录的是某人领用某材料的最近出库日期。VIEW1 (最近日期记录视图) 
    CODE  CPERSON  MAXDATE 
    0101    A      2009-09-01 
    0101    B      2009-09-03 
    0102    A      2009-09-08 TABLEA 
    ID    CODE  CPERSON  QTY  --DDATE (触发器更新) 00001  0101    A      10    --2009-09-08 00002  0101    B      20    --2009-09-01 VIEW1 (最近日期记录视图) 
    CODE  CPERSON  MAXDATE 
    0101    A      2009-09-10 
    0101    B      2009-09-13 TABLEA ID    CODE  CPERSON  QTY  --DDATE (触发器更新) 00003  0101    A      30    --2009-09-10 00004  0101    B      20    --2009-09-13 
    能够做到只触发更新当前的插入或更新记录吗?结果如下: 
    TABLEA ID    CODE  CPERSON  QTY  --DDATE (触发器更新) 
    00001  0101    A      10    --2009-09-08 
    00002  0101    B      20    --2009-09-01 
    00003  0101    A      30    --2009-09-10 
    00004  0101    B      20    --2009-09-13 
      

  17.   

    加一个条件inserted.id=tb.id就可以了