Tsql 在删除触发器中更新多行已删除的表
我从SQLServer2000中的以下触发器开始Tsql 在删除触发器中更新多行已删除的表,tsql,triggers,Tsql,Triggers,我从SQLServer2000中的以下触发器开始 ALTER TRIGGER DeleteTrigger ON [dbo].[WarrantyClaimsLineItems] FOR DELETE AS begin declare @wa int SET @wa = (SELECT warrantyAuthNo from DELETED) update dbo.warrantyclaimsauth set isused = 0 WHERE w
ALTER TRIGGER DeleteTrigger
ON [dbo].[WarrantyClaimsLineItems]
FOR DELETE
AS
begin
declare @wa int
SET @wa = (SELECT warrantyAuthNo from DELETED)
update dbo.warrantyclaimsauth
set isused = 0
WHERE warrantyClaimsAuth.warrantyauthno = @wa
end
基本上,每当从表中删除一个行项目时,我都需要将分配给该行项目的warrantyauth.isUsed更新回false
它在删除一个行项目时起作用,但在删除多个行项目时,我会出现以下错误
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
但是,这将在isUsed字段中用0更新保修期内的每一行。
谁能帮我解决我做错了什么?
谢谢大家! 您的加入条件在第二个条件中是错误的。试试这个:
AFTER DELETE
AS
begin
update a set isUsed = 0
from dbo.warrantyclaimsauth a
inner join deleted d on a.warrantyAuthNo = d.warrantyAuthNo
end
您加入了deleted
,其中warrantyauthno
等于自身,而不是deleted
表中的值。实际上,您只是执行了一个交叉连接的deleted
,而没有过滤任何行
inner join deleted d on a.warrantyAuthNo = a.warrantyAuthNo
应该是
inner join deleted d on a.warrantyAuthNo = d.warrantyAuthNo
你现在有一个简单的连接条件,给出了一个交叉连接,它不会过滤到删除的哦,天哪,我真是个笨蛋,我疯了,一直忽略了这一点。谢谢,很抱歉这个愚蠢的问题!
....
AFTER DELETE
AS
begin
update dbo.warrantyclaimsauth set isUsed = 0
from dbo.warrantyclaimsauth a
inner join deleted d on a.warrantyAuthNo = d.warrantyAuthNo
end
....
AFTER DELETE
AS
begin
update dbo.warrantyclaimsauth set isUsed = 0
from dbo.warrantyclaimsauth a
inner join deleted d on a.warrantyAuthNo = d.warrantyAuthNo
end