2010-03-16 11 views
23

Sto mettendo insieme un semplice database di test per imparare MVC con. Voglio aggiungere un campo DateTime per mostrare quando il record è stato CREATO.Rendere automatico un campo DateTime in un database?

ID = int 
Name = Char 
DateCreated = (dateTime, DateTime2..?) 

Ho la sensazione che questo tipo di cattura DateTime può essere eseguita automaticamente - ma questo è tutto quello che ho, una sensazione. Può essere fatto? E se sì, come?

Mentre siamo sull'argomento: se volessi includere un altro campo che catturasse il DateTime di quando il record era ULTIMO AGGIORNATO come avrei fatto.

Spero di non farlo manualmente.

Molte grazie

Mike

risposta

30

è necessario impostare il "valore di default" per il campo data per getdate(). Qualsiasi record inserito nella tabella avrà automaticamente la data di inserimento come valore per questo campo.

La posizione della proprietà "valore predefinito" dipende dalla versione di SQL Server Express in esecuzione, ma dovrebbe essere visibile se si seleziona il campo della data della tabella quando si modifica la tabella.

+0

Ho modificato il campo in DateTime2 (7) e inserito GETDATE() nel valore predefinito. Tuttavia, quando visualizzi la tabella e provo ad accedere ai dati, ricevo un messaggio 'non può contenere un errore nullo' durante l'estrazione dal campo DateTime - ovviamente non ho inserito nulla perché mi aspettavo che venisse aggiornato automaticamente . Inoltre, sto usando Visual Web Developer 2008 Express Edition (che credo utilizzi il pacchetto del database SQL Express). – RocketGoal

+0

@Mike - rendere nullable anche la colonna e quindi dovrebbe funzionare –

+0

Ho trovato il problema - Non avevo impostato la colonna ID su Identity, quindi il messaggio enorme mi stava indicando la colonna ID errata e non il mio DateTime. Ho imparato. Scuse. Ma funziona. Grazie molto. – RocketGoal

21

Sì, ecco un esempio:

CREATE TABLE myTable (col1 int, createdDate datetime DEFAULT(getdate()), updatedDate datetime DEFAULT(getdate())) 

È possibile inserire nella tabella senza indicare le createdDate e updatedDate colonne:

INSERT INTO myTable (col1) VALUES (1) 

o utilizzare la parola chiave DEFAULT:

INSERT INTO myTable (col1, createdDate, updatedDate) VALUES (1, DEFAULT, DEFAULT) 

Quindi creare un trigger per l'aggiornamento della colonna updatedDate:

CREATE TRIGGER dbo.updateMyTable 
ON dbo.myTable 
FOR UPDATE 
AS 
BEGIN 
    IF NOT UPDATE(updatedDate) 
     UPDATE dbo.myTable SET updatedDate=GETDATE() 
     WHERE col1 IN (SELECT col1 FROM inserted) 
END 
GO 
+0

Grazie, ma sono davvero all'inizio della mia esperienza SQL, quindi sto usando l'IDE per aiutarmi a creare un tavolo. – RocketGoal