写了一个触发器,报“消息 4104,级别 16,状态 1,过程 TR_Total_Score,第 15 行
无法绑定由多个部分组成的标识符 "inserted.CheckID"”
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GOCREATE TRIGGER TR_Total_Score
   ON  CheckScore
   AFTER INSERT,DELETE,UPDATE
AS 
BEGIN SET NOCOUNT ON;    UPDATE [StandardCheck] SET  [TotalScore] = (SELECT SUM(GetScore) FROM CheckScore Where CheckID=inserted.CheckID) WHERE  CheckID=inserted.CheckIDEND
GO其中要把 CheckScore表中列GetSore的符合记录的值汇总改写StandardCheck表的TotalScore列,在线等。多谢。

解决方案 »

  1.   

    CREATE TRIGGER TR_Total_Score 
      ON  CheckScore 
      AFTER INSERT,DELETE,UPDATE 
    AS 
    BEGIN SET NOCOUNT ON;     UPDATE [StandardCheck] 
        SET  [TotalScore] = (SELECT SUM(GetScore) FROM CheckScore Where CheckID=inserted.CheckID)
        FROM Inserted
        WHERE  CheckID=inserted.CheckID END 
    GO 
      

  2.   

    UPDATE [StandardCheck] SET  [TotalScore] = (SELECT SUM(GetScore) FROM CheckScore Where CheckID=inserted.CheckID) 
      

  3.   

    十分感谢,只是还有点不太明白。为什么一定得加上 FROM Inserted?是再次申明一下加的是后面改过的列值吗?
    哈哈,晕了,越看越复杂,本来是简单的一句SQL。
      

  4.   


    SET ANSI_NULLS ON 
    GO 
    SET QUOTED_IDENTIFIER ON 
    GO CREATE TRIGGER TR_Total_Score 
      ON  CheckScore 
      AFTER INSERT,DELETE,UPDATE 
    AS 
    BEGIN SET NOCOUNT ON;     UPDATE a  SET  a.[TotalScore] = (SELECT SUM(GetScore) FROM CheckScore Where CheckID=inserted.CheckID) 
        from [StandardCheck] a,Inserted b
            WHERE  a.CheckID=b.CheckID END 
    GO 
      

  5.   

    你不是通过一张表更新的,你的更新是通过StandardCheck和INSERTED这两张表更新,
    不是标准的DML语句。
      

  6.   

    inserted 是张虚拟表,FROM子句没有这个表,你UPDATE的其它地方引用的时候就会报错了。