Я начал со следующего триггера в 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
, однако при этом каждая строка в гарантийном требовании обновляется с 0 вПоле isUsed.Может кто-нибудь помочь мне с тем, что я делаю не так?Спасибо!