2010-05-12 6 views
5

Voglio solo avere una colonna "ModifyDate" automaticamente compilata per me quando un record viene inserito o aggiornato.SQL Server 2005: colonna ModifyDate: sta utilizzando una colonna calcolata un modo corretto per implementarlo?

Devo utilizzare i trigger o è corretto utilizzare una colonna calcolata?

(Usando SSMS2005 e SQL Server 2005 Express)

+2

una colonna calcolata sarà ** non ** lavoro. Se si imposta il valore di una colonna calcolata su GETDATE(), verrà sempre restituita la data * corrente *, non l'ultimo aggiornamento. – egrunin

+0

Wow non mi sono reso conto che la colonna calcolata ricalcola su una selezione. Grazie! –

+1

Cosa succede se il valore calcolato è persistente? –

risposta

5

La parte INSERTed è semplice: basta definire un valore predefinito su quella colonna e quando si inserisce una nuova riga, non specificare un valore per quella colonna.

La parte UPDATE è più complicata: è necessario scrivere un trigger that fires ON UPDATE e quindi aggiornare quella colonna. Non penso che ci sia un altro modo per farlo in SQL Server.

La domanda è: hai davvero bisogno della data del calendario attuale? In caso contrario, se si desidera solo avere un "indicatore" sul fatto che una riga sia stata modificata o meno, controllare lo ROWVERSION column type (precedentemente noto come TIMESTAMP).

Non vedo davvero come si possa usare una colonna calcolata per questo - è necessario memorizzare quella data da qualche parte, e tenerla corrente con INSERT e ogni successivo AGGIORNAMENTO - solo un trigger riuscirà a farlo.

2

suppongo si intende un vincolo predefinito al posto di una colonna calcolata.

Se è così, va bene. Preferisco farlo in quel modo. Un possibile svantaggio è che un client può sovrascrivere il valore predefinito, ma se non si ha fiducia nel client, si potrebbe anche avvolgere l'accesso alla tabella nelle stored procedure.

Anche i trigger funzioneranno, ma i trigger tendono a generare ulteriore complessità. Gli errori di codifica che includono i trigger sono tra i problemi di database più difficili in circolazione.

+2

default non aiutano quando si aggiorna una riga .... si "sparano" sempre solo quando si verifica il primo INSERT .... –

3

Vorrei suggerire di stare lontano dai trigger e impostare la colonna Date Modified con una stored procedure utilizzando la funzione getDate del server.

Esempio:

Aggiornamento I clienti di impostare FirstName = 'Jim', Cognome = 'Jones', DateModified = getDate()