2012-03-01 4 views
11

Ho una tabella con 3 campi [ID, Nome, Ultimo aggiornamento].
LastUpdated ha un valore predefinito di "GetDate() in modo che si riempie automaticamente quando viene aggiunto un nuovo record.Aggiornamento trigger T-SQL

Quando invece effettuare un aggiornamento sul tavolo, mi piacerebbe avere questo campo stesso ripristinare al GetDate corrente .()

CREATE TRIGGER dbo.Table1_Updated 
    ON dbo.Table1 
    AFTER UPDATE 
AS 
BEGIN 
    SET NOCOUNT ON; 
    UPDATE dbo.Table1 SET LastUpdated = GETDATE() 
END 
GO 

Ma perché non ho una clausola WHERE, tutti i record vengono aggiornati

DOMANDA.
Dove vorrei ottenere il valore dell'ID del record aggiornato un UPD ATE Trigger?

Il fatto che sto aggiornando un campo della tabella all'interno di Trigger, richiama un nuovo evento Trigger (e così via)?

+0

@Damien_The_Unbeliever sicuro di capire che, ma questa discussione è solo un esempio per me capire il concetto. questo non è il vero codice. –

risposta

21

Da "INSERTED", la tabella INSERTED è comune a entrambi i trigger INSERT, UPDATE.

CREATE TRIGGER dbo.Table1_Updated 
ON dbo.Table1 
FOR INSERT, UPDATE /* Fire this trigger when a row is INSERTed or UPDATEd */ 
AS BEGIN 
    UPDATE dbo.Table1 SET dbo.Table1.LastUpdated = GETDATE() 
    FROM INSERTED 
    WHERE inserted.id=Table1.id 
END 
+0

quindi anche se il TSQL sta semplicemente facendo un UPDATE su qualsiasi campo, all'interno del trigger vado a cercare la tabella virtuale inserita? A proposito, ho bisogno di mettere PER INSERISCI ... anche se ho solo bisogno di AGGIORNAMENTO? –

1
Update table1 
set LastUpdated = getdate() 
from inserted i, table1 a 
where i.pk1 = a.pk1 
+0

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=57227 –