插入/更新触发器中的条件不起作用

时间:2015-12-30 06:20:51

标签: sql sql-server triggers

这是我的触发器:

  Create trigger Points
  on Posts
  after insert, update
  As
  declare @Id int;
  declare @value int;

  select @value= Count(i.Message) from Posts i;
  select @Id = [PostedBy] from inserted;

  update AspNetUsers set User_points = @value * 3
  where @Id = @Id

这里,在最后一行,条件总是失败。它没有选择正确的Id并在所有行中的User_Points列中更新相同的值而不是特定的行。

我写了一个insert语句来检查我得到的值是这样的:

   insert into Employee_Demo(PostedBy, TotalCount)
   values (@postedby,@value );

在这里,我在表中获得了正确的@postedby值。 以前,我正在尝试这个:

    create trigger Points
    on Posts
    after insert, update
    As
   declare @value int
   declare @postedby int
   select @value= Count(Message) from Posts
   select @postedby = PostedBy from inserted

   update AspNetUsers set User_points = @value * 3
   where Id = @postedby
请某人帮助我。如何根据Id更新单行。 还有一件事,PostedBy不是post table中的主键。它是aspnetuser表的外键,它包含已发布消息的用户的id值,如下图所示。 enter image description here

也尝试了这个:

 update AspNetUsers set User_points = @value * 3
FROM INSERTED INNER JOIN Posts ON  INSERTED.PostedBy = Posts.PostedBy
INNER JOIN AspNetUsers ON AspNetUsers.Id = inserted.PostedBy

2 个答案:

答案 0 :(得分:0)

目前,您正在比较where子句中的相同变量,您应该将DB字段与Variable进行比较。

答案 1 :(得分:0)

最后让它使用此查询不知道它是如何发生的

 update AspNetUsers set User_points = @value * 3
 where Id = (Select PostedBy from inserted)

并删除@Id或@PostedBy的声明。当我声明那些变量然后从插入到那些变量的值分配然后使用该变量值然后它不起作用。 相反,直接从insert表中的值获取where where condition。