Sql server 删除带有奇数参数的触发器,其中参数为';行不通
本质上,我想在团队中添加一名新球员后,删除前一名球员。我试着模仿我在这里发现的一些东西,但似乎不起作用,这就是为什么我要提出这个问题。我想这可能与我的复杂where子句有关 删除的条件是,它应该是相同的角色、相同的团队,但ID不同。与插入的播放机不同Sql server 删除带有奇数参数的触发器,其中参数为';行不通,sql-server,triggers,sql-delete,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
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
问题是您在和p.playerid!=i、 在您的
WHERE
中使用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;
p.playerid=i.playerid上的
。。。还有p.PlayerID!=i、 PlayerID
这两条语句怎么可能都是真的?但您的模式在逻辑上已经存在缺陷。球队和球员是不同的实体。你把它们弄成了一个。角色也可能是不同的实体。你还做出了另一个最终可能成为问题的假设——“先前的玩家”没有定义。