Ok. Sono abbastanza nuovo per i trigger SQL e ho avuto alcuni problemi con loro. Il trigger di inserimento funziona bene e anche il trigger Elimina. In un primo momento, l'eliminazione su più righe ne eliminerebbe solo una, ma sono riuscita a capirlo da sola :)Trigger SQL di aggiornamento riga multiplo da singola istruzione SQL di aggiornamento
Tuttavia, anche dopo una ricerca approfondita (qui e su Google) non riesco a trovare una risposta soddisfacente al trigger UPDATE che ho. Se faccio un aggiornamento come
UPDATE Customers Set CustomerUser = 0 Where CustomerStatus = 3
Quindi, sfortunatamente, solo l'unico record sarebbe stato aggiornato, e l'altro sarebbe rimasto come era. Ovviamente, non va bene.
Il trigger che sto usando è:
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
Come vi renderete subito conto, questo trigger è grande - se si desidera aggiornare un solo record. Altrimenti, fallisce. Ora, la domanda principale sarebbe: come posso prendere tutti i record che necessitano di aggiornamento e aggiornarli tutti in un'unica azione.
Gli esempi che ho visto qui su Stack Overflow mi confondono in qualche modo, o sembrano inefficaci - per esempio, sembra che la maggior parte di loro si occupi di aggiornare solo UN valore in un secondo/altro tavolo, e non un gruppo come me cercando di fare Quelli che sembrano funzionare su più valori, non riesco a capire :(
Quindi dopo circa 2 ore di ricerche, mi arrendo, e spero che tu possa aiutarmi :) Mi rendo conto che questo è un problema di innesco-newbie e sebbene conosca il mio MS-SQL, i trigger sono qualcosa che non ho mai usato fino ad ora. Quindi, qualsiasi aiuto è molto benvenuto :) W
La tabella 'inserted' può contenere più righe. Consiglio a tutti di non usare i grilletti. Sono troppo difficili da ottenere, e anche se lo gestisci, il risultato è molto difficile da mantenere. – Andomar
Bene ... Posso in teoria fare l'aggiornamento con le istruzioni SQL post-aggiornamento, e fintanto che INSERT e DELETE funzioneranno correttamente, questa sarebbe una possibile soluzione di second-best. Ma vorrei ancora tanto sapere come attivare questo trigger ... Sto usando un solo set di trigger perché nella circostanza è esattamente ciò di cui ho bisogno e offre la soluzione migliore :) Grazie per il tuo commento. – Irresistance
@Irresistance I trigger sono una soluzione non preferita per molte ragioni. Come dice Andromar, sono difficili da scrivere e da mantenere. Inoltre influenzano negativamente le prestazioni di INSERT, UPDATE e DELETE, rendono le transazioni più complicate, possono aumentare la possibilità di deadlock e sono un vero Pain per le attività operative. Ma la ragione principale è che sono nascosti alla vista normale, rendendoli effettivamente "magici". I trigger innescano costantemente DBA e sviluppatori perché si dimenticano di essi, causando molti problemi di supporto lunghi e sconcertanti che terminano con "Quella tabella ha trigger?" – RBarryYoung