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