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

问题描述 投票:0回答:1

本质上,我希望在将新玩家添加到团队后,删除以前的玩家。我尝试模仿在这里找到的一些东西,但是它似乎没有用,这就是为什么我要提出这个问题。我认为这可能与我的特定复杂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
sql-server triggers sql-delete
1个回答
0
投票

问题是您在p.playerid = i.playerid中有子句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;
© www.soinside.com 2019 - 2024. All rights reserved.