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

时间:2019-12-05 16:07:33

标签: sql-server triggers sql-delete

从本质上讲,我希望在将新玩家添加到团队中时,删除先前的玩家。我尝试模仿在这里找到的一些东西,但是它似乎没有用,这就是为什么我要提出这个问题。我认为这可能与我特定的复杂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

1 个答案:

答案 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;