在参数不起作用的地方用奇数删除触发器

Delete Trigger with odd where parameters isn't working

本质上,我想在团队中添加新玩家时,移除之前的玩家。我试过模拟我在这里找到的一些东西,但它似乎没有用,这就是我提出这个问题的原因。我认为这可能与我特定的复杂 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

问题是您的 ON 中有 p.playerid = i.playerid 子句,WHERE 中有 p.PlayerID != i.PlayerID 子句,并定义两者都必须为 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;