从本质上讲,我希望在将新玩家添加到团队中时,删除先前的玩家。我尝试模仿在这里找到的一些东西,但是它似乎没有用,这就是为什么我要提出这个问题。我认为这可能与我特定的复杂where子句有关?
删除的条件是,它应该是相同的角色,相同的团队,但ID不同。与插入的播放器不同。
create or alter trigger retire2
on Players
after insert
as
begin
delete p
from players p join inserted i
on p.playerid=i.playerid
where (p.TeamID=i.TeamID and
p.Role=i.Role and
p.PlayerID!=i.PlayerID);
end
go
答案 0 :(得分:0)
问题是您在p.playerid = i.playerid
的{{1}}中有ON
子句,在p.PlayerID != i.PlayerID
中有WHERE
子句,并定义两者都必须为 true 。东西怎么可能不等于某物,而又同时等于某物(忽略量子物理学)?
我怀疑你到底在追求什么?
CREATE OR ALTER TRIGGER retire2
ON dbo.Players
AFTER INSERT
AS
BEGIN
DELETE P
FROM dbo.Players P
WHERE EXISTS (SELECT 1
FROM inserted i
WHERE i.TeamID = P.TeamID
AND i.[Role] = P.[Role]
AND i.PlayerID != P.PlayerID);
END;