366 Stimmen

Hinzufügen des Standardwerts des Datetime-Felds in SQL Server zu einem Zeitstempel

Ich habe eine Tabelle, die Formulare sammelt, die von unserer Website aus eingereicht wurden, aber aus irgendeinem Grund wurde bei der Erstellung der Tabelle kein Zeitstempel in die Tabelle eingefügt. Ich möchte, dass sie das genaue Datum und die genaue Uhrzeit der Eingabe des Datensatzes enthält.

Ich weiß, dass es irgendwo da drin steht, aber ich kann nicht herausfinden, wie man den Standardwert einstellt (wie in Access, man verwendet getNow() o Now() ), aber ich weiß nicht, wohin damit.

436voto

TheQ Punkte 6700

Zum Ändern einer vorhandenen Spalte in einer vorhandenen Tabelle:

ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETDATE() FOR YourColumn

190voto

Tony L. Punkte 15258

Dies kann auch über die SSMS-GUI erfolgen.

  1. Bringen Sie Ihre Tabelle in die Entwurfsansicht (Rechtsklick auf die Tabelle im Objekt-Explorer-> Gestaltung )
  2. Fügen Sie der Tabelle eine Spalte hinzu (oder klicken Sie auf die Spalte, die Sie aktualisieren möchten, wenn sie bereits vorhanden ist)
  3. Geben Sie in Spalteneigenschaften (getdate()) en D Bindung Feld wie unten abgebildet

Image of table in design view

151voto

Sanjay Punkte 1425

Geben Sie in dieser Tabelle in SQL Server den Standardwert dieser Spalte als CURRENT_TIMESTAMP . Der Datentyp dieser Spalte kann sein datetime o datetime2 .

z.B..

Create Table Student
(
  Name varchar(50),
  DateOfAddmission datetime default CURRENT_TIMESTAMP
);

36voto

Tanner Punkte 21219

Während die markierte Antwort richtig ist:

ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETDATE() FOR YourColumn

Sie sollten immer die Zeitzonen berücksichtigen, wenn Sie einer Spalte Standardwerte für die Zeitangabe hinzufügen.

Sagen wir zum Beispiel dies datetime Wert soll anzeigen, wann ein Mitglied einer Website beigetreten ist, und Sie möchten, dass er dem Benutzer angezeigt wird, GETDATE() gibt die Serverzeit an, so dass es zu Abweichungen kommen kann, wenn sich der Benutzer in einem anderen Gebietsschema befindet als der Server.

Wenn Sie mit internationalen Nutzern zu tun haben, ist es in manchen Fällen besser, die GETUTCDATE() die:

Gibt den aktuellen Zeitstempel des Datenbanksystems als Datetime-Wert zurück. Der Zeitzonen-Offset der Datenbank ist nicht enthalten. Dieser Wert stellt die aktuelle UTC-Zeit (Coordinated Universal Time) dar. Dieser Wert wird vom Betriebssystem des Computers abgeleitet, auf dem die Instanz von SQL Server ausgeführt wird.

ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETUTCDATE() FOR YourColumn

Beim Abrufen der Werte sollte die Front-End-Anwendung/Website diesen Wert von der UTC-Zeit in das Gebietsschema/die Kultur des Nutzers umwandeln, der sie anfordert.

24voto

Martin Smith Punkte 417623

Nullen in der Spalte nicht zulassen und einen Standardwert für die Spalte von getdate()

/*Deal with any existing NULLs*/
UPDATE YourTable SET created_date=GETDATE() /*Or some sentinel value 
                                                '19000101' maybe?*/
WHERE created_date IS NULL

/*Disallow NULLs*/
ALTER TABLE YourTable ALTER COLUMN created_date DATE NOT NULL

/*Add default constraint*/
ALTER TABLE YourTable ADD CONSTRAINT
    DF_YourTable_created_date DEFAULT GETDATE() FOR created_date

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X