这是我的触发器:凡在插入/更新触发条件不工作
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
这里,在最后一行,在条件总是fails.Its不采摘正确的ID,并在所有的User_Points更新列相同的值行不在特定行中。
我写了一个INSERT语句来检查我得到什么值回这样的:
insert into Employee_Demo(PostedBy, TotalCount)
values (@postedby,@value);
在这里,我得到表正确@postedby值。 Previosly,我是想这样的:
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不是邮件列表中的主键。它是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
你的触发器有** MAJOR **缺陷,你似乎认为它会被称为**每行**一次 - 这是**不是**的情况。触发器将在每个语句**中触发一次**,所以如果你的引发这个触发器的'INSERT'或'UPDATE'语句一次触发25行,你将触发**触发一次**,但是然后“插入”和“删除”将分别包含25行。您的代码在这25行中选择哪一个? 'select @Id = [PostedBy] from inserted;' - 这是非确定性的,你会得到**一个任意的行**,你将**忽略所有其他行**。 –