select sum(s.sl) from glzcsj s
left join deleted d on s.id=d.id請問這個加總是刪除后的加總還是刪除前的加總,如果換成inserted,是新增前的加总还是新增后的.select sum(s.sl+i.sl) from glzcsj s
left join inserted i on s.id=i.id
這樣好像也沒什么作用

解决方案 »

  1.   

    glzcsj 和 deleted 是同一個表
      

  2.   

    Deleted 表用于存储 DELETE 和 UPDATE 语句所影响的行的复本。在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传输到 deleted 表中。Deleted 表和触发器表通常没有相同的行。Inserted 表用于存储 INSERT 和 UPDATE 语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到 inserted 表和触发器表中。Inserted 表中的行是触发器表中新行的副本。更新事务类似于在删除之后执行插入;首先旧行被复制到 deleted 表中,然后新行被复制到触发器表和 inserted 表中。
      

  3.   

    --刪除
    ALTER  TRIGGER TR_glzcsj_D
    ON dbo.glzcsj
    FOR DELETE
    AS BEGIN
      SET NOCOUNT ON
      UPDATE a SET ywgs=b.ywgs, ykgs=b.ykgs
      FROM glzc a,
      (SELECT deleted.glzcid,ISNULL(SUM(case s.glzt when '狀態一' then isnull(s.sl,0) end),0)
      -ISNULL(SUM(case s.glzt when '狀態二' then isnull(s.sl,0) end),0) ywgs,
      ISNULL(SUM(case s.glzt when '狀態三' then isnull(s.sl,0) end),0)
      +ISNULL(SUM(case s.glzt when '狀態四' then isnull(s.sl,0) end),0) ykgs
      FROM deleted
      left join glzcsj s on deleted.glzcid=s.glzcid
      GROUP BY deleted.glzcid, deleted.sl) b
      WHERE a.id=b.glzcid
    END我中午睡覺的時候突然想到了.應該這樣寫,原因是:
    如果刪除最后glzcsj中最后和筆記錄.
    select * from glzcsj left join deleted on glzcsj.glzcid=deleted.glzcid時因為glzcsj這裡已經為空,glzcsj.glzcid是不會有值的,必須反過來過.去讀deleted.glzcid的值.因為不管怎樣.delete時.deleted中一定會有記錄
      

  4.   

    謝謝.
    splory(爽儿)
    是你的這段話提醒了我.