wake-up-neo.net

Fügen Sie eine Zeitstempelpalte mit dem Standard JETZT () nur für neue Zeilen hinzu

Ich habe eine Tabelle mit Tausenden von Zeilen. Da die Tabelle ursprünglich nicht mit der Spalte created_at erstellt wurde, gibt es keine Möglichkeit, ihren Erstellungszeitstempel zu erhalten. Es ist jedoch wichtig, die Zeitstempel für zukünftige Reihen zu erhalten. 

Gibt es eine Möglichkeit, eine Zeitstempel-Spalte mit dem Standardwert JETZT () hinzuzufügen, damit die Werte nicht für die vorherigen Zeilen, sondern nur für die zukünftigen Zeilen aufgefüllt werden?

Wenn ich die ALTER-Abfrage durchführe, werden alle Zeilen mit einem Zeitstempel gefüllt:

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()
60
Artur

Sie müssen die Spalte mit dem Standardwert null hinzufügen und dann die Spalte ändern, um den Standardwert now() zu erhalten.

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP;
ALTER TABLE mytable ALTER COLUMN created_at SET DEFAULT now();
91
Philip Couling

Sie können die Standardregel mit der Alterstabelle hinzufügen. 

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()

setzen Sie dann sofort alle vorhandenen Zeilen auf null:

UPDATE mytable SET created_at = NULL

Ab diesem Zeitpunkt wird die DEFAULT wirksam.

23
Renzo

Versuchen Sie etwas wie: -

ALTER TABLE table_name ADD  CONSTRAINT [DF_table_name_Created] 
DEFAULT (getdate()) FOR [created_at];

ersetzen Sie table_name durch den Namen Ihrer Tabelle.