Триггер SQL обновления нескольких строк из одной инструкции SQL Update
Ok. Я довольно новичок в триггерах SQL и имел некоторые проблемы с ними. Insert trigger работает отлично,и триггер удаления также. Сначала удаление нескольких строк удалило бы только одну, но мне удалось выяснить это для себя:)
однако даже после обширного поиска (здесь и в Google) я не могу найти удовлетворительного ответа на триггер обновления, который у меня есть. Если я сделаю обновление, как
UPDATE Customers Set CustomerUser = 0 Where CustomerStatus = 3
тогда, к сожалению, только один запись будет обновлена, а другая останется такой, как была. Очевидно, что это нехорошо.
триггер, который я использую:
ALTER TRIGGER [dbo].[TRG_TriggerName] ON [dbo].[USER_Customers]
FOR UPDATE
AS
declare @customerid int;
declare @customervenue int;
declare @customeruser int;
declare @customerarea int;
declare @customerevent int;
declare @customerproject int;
declare @customerstatus int;
select @customerid=i.CustomerID from inserted i;
select @customervenue=i.CustomerVenue from inserted i;
select @customerarea=i.CustomerArea from inserted i;
select @customerevent=i.CustomerEvent from inserted i;
select @customerproject=i.CustomerProject from inserted i;
select @customeruser=i.CustomerUser from inserted i;
select @customerstatus=i.CustomerStatus from inserted i;
Update USER_Instances Set InstanceArea = @customerarea, InstanceVenue = @customervenue, InstanceUser = @customeruser, InstanceStatus = @customerstatus, InstanceEvent = @customerevent, InstanceLastUpdate = GetDate() Where InstanceObject = 17 AND InstanceIdentity = @customerid
GO
Как вы сразу поймете, этот триггер является большим, если вы хотите обновить только одну запись. В противном случае он терпит неудачу. Теперь-главный вопрос здесь будет - как мне поймать все записи, которые нуждаются в обновлении, и обновить их все в одном действии триггера.
примеры, которые я видел здесь на переполнении стека, смущают меня несколько или кажутся неэффективными - например, кажется, что большинство из них имеют дело с обновлением только одного значения во второй/другой таблице, а не с целой кучей, как я пытаюсь сделать. Те, которые, кажется, работают на нескольких значениях, я не могу понять : (
Итак, примерно через 2 часа поиска я сдаюсь и надеюсь, что вы можете мне помочь :) я понимаю, что это проблема триггера-новичка, и хотя я знаю, что мой MS-SQL, триггеры-это то, что я никогда не использовал до сих пор. Поэтому любая помощь очень приветствуется :) W
1 ответов
кажется, что нужно что-то вроде этого
ALTER TRIGGER [dbo].[TRG_TriggerName] ON [dbo].[USER_Customers]
FOR UPDATE
AS
UPDATE USER_Instances
SET InstanceArea = i.CustomerArea,
InstanceVenue = i.CustomerVenue,
InstanceUser = i.CustomerUser,
InstanceStatus = i.CustomerStatus,
InstanceEvent = i.CustomerEvent,
InstanceLastUpdate = GetDate()
FROM USER_Instances JOIN inserted i
ON InstanceIdentity = i.CustomerID AND InstanceObject = 17
С inserted
виртуальная таблица может содержать несколько строк, что вам нужно JOIN
это правильно делать UPDATE
.