繁体   English   中英

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

[英]where condition in Insert/Update Trigger not working

这是我的触发器:

  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 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表中的主键,它是aspnetuser表的外键,它包含发布消息的用户的id值,如下图所示。 在此处输入图片说明

也尝试了这个:

 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

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

终于让它与这个查询一起工作不知道它如何发生

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

并删除@Id或@PostedBy的声明。 当我声明这些变量,然后将值从插入的值分配给那些变量,然后在不起作用的地方使用该变量值。 相反,直接从条件起作用的插入表中获取价值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM