這是我的觸發器:凡在插入/更新觸發條件不工作
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;' - 這是非確定性的,你會得到**一個任意的行**,你將**忽略所有其他行**。 –