2011-10-12 8 views
38

Sería bueno saber cómo crear un disparador que automáticamente actualiza la columna modifiedDate en mi tabla de SQL Server:Cómo crear detonante de actualización automática fecha de modificación con SQL Server 2008

Tabla TimeEntry

código
Id (PK) 
UserId (FK) 
Description 
Time 
GenDate 
ModDate 

disparador:

+ TR_TimeEntry_UpdateModDate() 
+ TR_TimeEntry_InsertGenDate() 

Un ejemplo para la actualización ModDate habría nic mi.

¡Gracias de antemano!

Julian

+0

¿Tiene que ser un disparador? – gbn

Respuesta

72

Mi enfoque:

  • definir una restricción predeterminado en la columna de la ModDate con un valor de GETDATE() - esto se encarga el caso INSERT

  • tienen un disparador AFTER UPDATE a actualice la columna ModDate

Algo así como:

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

También vale la pena considerar 'getUtcDate()' según los requisitos de tu zona horaria. – Rory

+35

Y si alguien se preguntaba, como yo, si esto se llamará recursivamente a sí mismo, hay una opción de base de datos RECURSIVE_TRIGGERS que normalmente tendría desactivada, lo que evita que un disparador como este se llame a sí mismo. http://msdn.microsoft.com/en-us/library/ms190739.aspx – Rory

+1

No lo obtuve. Debo hacer 'SET RECURSIVE_TRIGGERS' para' ON' o 'OFF' para evitar esto? – MarceloBarbosa

Cuestiones relacionadas