53 votes

Comment ajouter une colonne "dernière mise à jour" dans une table SQL Server 2008 R2?

J'ai une table dans ma SQL Server 2008 R2 base de données, et que vous souhaitez ajouter une colonne appelée LastUpdated, qui sera modifié automatiquement à chaque fois que la ligne est mise à jour. De cette façon, je peux voir quand chaque ligne de la dernière mise à jour.

Il semble que SQL Server 2008 R2 ne pas avoir un type de données pour gérer cela comme les versions antérieures, c'est pourquoi je ne suis pas sûr de la meilleure façon de le faire. Je me demandais à propos de l'aide d'un déclencheur, mais qu'arriverait-il lorsque le déclencheur de mise à jour de la ligne? Sera que feu le trigger, etc?

72voto

Aaron Bertrand Points 116343

Pour savoir quelle ligne a été mise à jour pour la dernière fois, vous devez créer une nouvelle colonne de type DATETIME / DATETIME2 et la mettre à jour avec un déclencheur. Aucun type de données ne se met automatiquement à jour avec les informations de date / heure chaque fois que la ligne est mise à jour.

Pour éviter la récursivité, vous pouvez utiliser la clause UPDATE() à l'intérieur du déclencheur, par exemple

 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
 

12voto

marc_s Points 321990

Il n'est pas facile, malheureusement.

Vous pouvez ajouter un nouveau DATETIME (ou DATETIME2) champ à votre table, et vous pouvez lui donner une contrainte par défaut de GETDATE() - qui sera mis à la valeur lorsqu'une nouvelle ligne est insérée.

Malheureusement, d'autres que de créer un AFTER UPDATE déclencheur, il n'est pas "out of the box" de manière à le maintenir à jour tout le temps. Le déclencheur en soi n'est pas difficile à écrire, mais vous aurez à écrire pour chaque table unique qui shuold ont cette fonctionnalité.....

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X