2010-03-16 9 views
23

Ich stelle eine einfache Testdatenbank zusammen, um MVC mit zu lernen. Ich möchte ein DateTime-Feld hinzufügen, das angezeigt wird, wenn der Datensatz CREATED erstellt wurde.Ein DateTime-Feld in einer Datenbank automatisch erstellen?

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

Ich habe das Gefühl, dass diese Art der Erfassung automatisch Datetime getan werden kann - aber das ist alles was ich habe, ein Gefühl. Kann es gemacht werden? Und wenn ja wie?

Während wir auf das Thema sind: wenn ich wollte ein anderes Feld enthalten, die die Datetime von gefangen, wenn der Datensatz zuletzt aktualisiert wurde, wie würde ich das tun.

Ich hoffe, dies nicht von Hand zu tun.

Vielen Dank

Mike

Antwort

30

Sie müssen getdate() den "Standardwert" für das Datumsfeld einzustellen. Alle Datensätze, die in die Tabelle eingefügt werden, haben automatisch das Einfügedatum als Wert für dieses Feld.

Die Position der Eigenschaft "Standardwert" hängt von der Version von SQL Server Express ab, die Sie ausführen. Sie sollte jedoch sichtbar sein, wenn Sie beim Bearbeiten der Tabelle das Datumsfeld Ihrer Tabelle auswählen.

+0

Ich habe das Feld in DateTime2 (7) geändert und GETDATE() auf den Standardwert gesetzt. Wenn jedoch eine Ansicht der Tabelle Inhalt und versuchen, in Daten zu erden Ich erhalte eine "kann nicht Null Fehler enthalten" beim Tabulator aus dem DateTime-Feld - offensichtlich habe ich nichts hinein, wie ich erwartet, dass es automatisch aktualisiert wird . Auch ich bin mit Visual Web Developer 2008 Express Edition (was ich glaube, dass der SQL Express Datenbank-Paket verwendet). – RocketGoal

+0

@ Mike - die Spalte NULL-Werte zulässt sowie machen und dann sollte es –

+0

Arbeit fand ich das Problem - ich hatte nicht meine ID-Spalte auf Identity so eingestellt, dass die große Nachricht tatsächlich wurde mir auf meine ID-Spalte zeigt nicht mehr korrekt sind und nicht meine Datetime. Ich habe gelernt. Entschuldigung. Aber es funktioniert. Danke vielmals. – RocketGoal

21

Ja, hier ist ein Beispiel:

INSERT INTO myTable (col1) VALUES (1) 

Oder verwenden Sie das Schlüsselwort DEFAULT:

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

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

Sie in die Tabelle ohne Angabe der CreatedDate und updatedDate Spalten einfügen können

Erstellen Sie anschließend einen Trigger zum Aktualisieren der Spalte updateDate:

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

Danke, aber ich bin wirklich am Anfang meiner SQL-Erfahrung, also verwende ich die IDE, um mir zu helfen, eine Tabelle zu erstellen. – RocketGoal

Verwandte Themen