2010-07-06 11 views
10

Ho il seguente trigger ma non è necessario trovare l'identità della riga in modo da non aggiornare tutti i record nella tabella. Come posso ottenere l'identità della riga interessata?Identità della riga inserita/aggiornata nel trigger

BEGIN 
    UPDATE tb_Division SET LastModified = GetDate() WHERE "id of inserted/updated row" 
END 

risposta

15

Dal momento che un trigger in MS SQL Server non fa distinzione tra le operazioni single-registrare e multi-record, si dovrebbe aderire al tavolo con la tabella pseudo inserito o utilizzare una selezione secondaria:

UPDATE tb_Division 
SET LastModified = GETDATE() 
WHERE id IN (SELECT id FROM INSERTED) 

id essere il primario colonna chiave del tuo tavolo.

4

Hai guardato l'id della tabella logica inserted? Bisogna stare attenti quando si usano i trigger, come un trigger può essere operativo su più di una riga:

UPDATE tb_Division AS td 
    SET LastModified = GetDate() 
FROM INSERTED AS i 
WHERE td.id = = i.id 

Vedere here per maggiori dettagli, e da MSDN:

trigger DML usa la eliminato e inserito le tabelle logiche (concettuali). Sono strutturalmente simili alla tabella su cui è definito il trigger, ovvero la tabella su cui viene tentata l'azione dell'utente. Le tabelle cancellate e inserite contengono i vecchi valori o nuovi valori delle righe che possono essere modificati dall'azione dell'utente. Ad esempio, per recuperare tutti i valori nella tabella eliminato, utilizzare:

+0

grazie per i collegamenti. – Chin

0

Mente voi - un trigger può trattare con una tonnellata di file in una sola volta - si dovrà tenerne conto!

Devi iscriverti vostro tavolo per essere aggiornato con la pseudo-colonna Inserted su quel campo ID:

UPDATE dbo.tb_Division 
SET LastModified = GetDate() 
FROM Inserted i 
WHERE tb_Division.Id = i.Id 

o qualcosa di simile.

Problemi correlati