Триггер 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.