gpt4 book ai didi

tsql - 在删除触发器中更新表以删除多行

转载 作者:行者123 更新时间:2023-12-01 08:36:50 24 4
gpt4 key购买 nike

我从 SqlServer 2000 中的以下触发器开始

 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.

我明白为什么,触发器只希望删除一条记录。所以我需要对其进行修改以处理多行删除。

我做了一些研究并将我的触发器修改为这个

....
AFTER DELETE
AS
begin

update dbo.warrantyclaimsauth set isUsed = 0
from dbo.warrantyclaimsauth a
inner join deleted d on a.warrantyAuthNo = a.warrantyAuthNo


end

然而,这会在 isUsed 字段中将warrantyclaimsauth 中的每一行更新为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 进行 cross join,而没有过滤任何行。

关于tsql - 在删除触发器中更新表以删除多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8796135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com