update trigger insertar example ejemplos ejemplo create before antes after triggers sql-server-2008-r2

triggers - insertar - trigger sql server update ejemplo



¿Cómo agrego una columna de "última actualización" en una tabla de SQL Server 2008 R2? (2)

Tengo una tabla en mi base de datos de SQL Server 2008 R2 y me gustaría agregar una columna llamada LastUpdated, que se cambiará automáticamente cada vez que se actualice la fila. De esa manera, puedo ver cuándo se actualizó cada fila individual por última vez.

Parece que SQL Server 2008 R2 no tiene un tipo de datos para manejar esto como lo hicieron las versiones anteriores, así que no estoy seguro de cuál es la mejor manera de hacerlo. Me pregunté sobre el uso de un disparador, pero ¿qué pasaría cuando el disparador actualizara la fila? ¿Eso disparará de nuevo el gatillo, etc?


No es tan fácil, por desgracia.

Puede agregar un nuevo campo DATETIME (o DATETIME2 ) a su tabla, y puede asignarle una restricción predeterminada de GETDATE() , que establecerá el valor cuando se inserte una nueva fila.

Desafortunadamente, aparte de crear un desencadenante AFTER UPDATE , no hay una forma "fuera de la caja" para mantenerlo actualizado todo el tiempo. El activador en sí no es difícil de escribir, pero tendrá que escribirlo para cada una de las tablas que deben tener esa característica ...


Para saber qué fila se actualizó por última vez, debe crear una nueva columna de tipo DATETIME / DATETIME2 y actualizarla con un activador. No hay ningún tipo de datos que se actualice automáticamente con la información de fecha / hora cada vez que se actualice la fila.

Para evitar la recursión, puede utilizar la cláusula UPDATE() dentro del activador, por ejemplo,

ALTER TRIGGER dbo.SetLastUpdatedBusiness ON dbo.Businesses AFTER UPDATE -- not insert! AS BEGIN IF NOT UPDATE(LastUpdated) BEGIN UPDATE t SET t.LastUpdated = CURRENT_TIMESTAMP -- not dbo.LastUpdated! FROM dbo.Businesses AS t -- not b! INNER JOIN inserted AS i ON t.ID = i.ID; END END GO