2011-10-12 2 views
38

Sarebbe bello sapere come creare un trigger che auto-aggiorna la colonna modifiedDate nel mio SQL tabella Server:Procedura: Creazione di trigger per l'aggiornamento automatico data di modifica con SQL Server 2008

Tabella TimeEntry

codice
Id (PK) 
UserId (FK) 
Description 
Time 
GenDate 
ModDate 

innesco:

+ TR_TimeEntry_UpdateModDate() 
+ TR_TimeEntry_InsertGenDate() 

Un esempio di aggiornamento ModDate sarebbe nic e.

Grazie in anticipo!

Julian

+0

ha a essere un trigger? – gbn

risposta

72

Il mio approccio:

  • definiscono un vincolo predefinita sulla colonna ModDate con un valore di GETDATE() - Questo gestisce il caso INSERT

  • hanno un AFTER UPDATE trigger aggiorna la colonna ModDate

Qualcosa di simile:

CREATE TRIGGER trg_UpdateTimeEntry 
ON dbo.TimeEntry 
AFTER UPDATE 
AS 
    UPDATE dbo.TimeEntry 
    SET ModDate = GETDATE() 
    WHERE ID IN (SELECT DISTINCT ID FROM Inserted) 
+4

Inoltre vale la pena considerare 'getUtcDate()' in base ai requisiti del fuso orario. – Rory

+35

E se qualcuno si chiedesse, come me, se questo si chiamerà in modo ricorsivo, c'è un'opzione del database RECURSIVE_TRIGGERS che normalmente avresti disattivato, il che impedisce a un trigger come questo di chiamare se stesso. http://msdn.microsoft.com/en-us/library/ms190739.aspx – Rory

+1

Non ho capito. Dovrei fare 'SET RECURSIVE_TRIGGERS' su 'ON' o' OFF' per evitare questo? – MarceloBarbosa