J'ai une table qui a des milliers de lignes. Puisque la table n'a pas été construite avec la colonne created_at au départ, il est impossible d'obtenir leur horodatage de création. Il est cependant crucial de commencer à obtenir les horodatages des futures lignes.
Existe-t-il un moyen d'ajouter une colonne timestamp avec la valeur par défaut NOW () afin qu'elle ne remplisse pas les valeurs des lignes précédentes, mais uniquement pour les futures?
Si je fais la requête ALTER
, il remplit toutes les lignes avec timestamp:
ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()
Vous devez ajouter la colonne avec une valeur par défaut de null
, puis modifier la colonne pour avoir la valeur par défaut now()
.
ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP;
ALTER TABLE mytable ALTER COLUMN created_at SET DEFAULT now();
Vous pouvez ajouter la règle par défaut avec la table alter,
ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()
puis immédiatement mis à null toutes les lignes existantes:
UPDATE mytable SET created_at = NULL
Ensuite, à partir de ce moment, la variable DEFAULT
prendra effet.
Essayez quelque chose comme: -
ALTER TABLE table_name ADD CONSTRAINT [DF_table_name_Created]
DEFAULT (getdate()) FOR [created_at];
en remplaçant table_name
par le nom de votre table.