这是我的触发器:
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值,如下图所示。
也尝试了这个:
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
答案 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。