it-swarm.it

Come posso aggiungere una colonna "ultimo aggiornamento" in una tabella di SQL Server 2008 R2?

Ho una tabella nel mio database SQL Server 2008 R2 e vorrei aggiungere una colonna denominata LastUpdated, che verrà automaticamente modificata ogni volta che la riga viene aggiornata. In questo modo, posso vedere quando ogni singola riga è stata aggiornata l'ultima volta.

Sembra che SQL Server 2008 R2 non abbia un tipo di dati per gestirlo come facevano le versioni precedenti, quindi non sono sicuro del modo migliore per farlo. Mi chiedevo come usare un trigger, ma cosa sarebbe successo quando il trigger ha aggiornato la riga? Farà scattare di nuovo il grilletto, ecc.?

43
Avrohom Yisroel

Per sapere quale ultima riga è stata aggiornata, è necessario creare una nuova colonna di tipo DATETIME/DATETIME2 E aggiornarla con un trigger. Non esiste un tipo di dati che si aggiorna automaticamente con le informazioni di data/ora ogni volta che la riga viene aggiornata.

Per evitare la ricorsione, puoi usare la clausola UPDATE() all'interno del trigger, ad es.

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
62
Aaron Bertrand

Purtroppo non è così facile.

È possibile aggiungere un nuovo campo DATETIME (o DATETIME2) Alla tabella e dargli un vincolo predefinito di GETDATE() - che imposterà il valore quando un nuovo la riga è inserita.

Sfortunatamente, oltre alla creazione di un trigger AFTER UPDATE, Non esiste un modo "pronto all'uso" per mantenerlo sempre aggiornato. Il trigger di per sé non è difficile da scrivere, ma dovrai scriverlo per ogni singola tabella che deve avere quella funzione .....

10
marc_s