web-dev-qa-db-fra.com

Rendre un champ DateTime dans une base de données automatique?

Je crée une base de données de test simple pour apprendre MVC. Je veux ajouter un champ DateTime pour montrer quand l'enregistrement a été CRÉÉ.

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

J'ai le sentiment que ce type de capture DateTime peut se faire automatiquement - mais c'est tout ce que j'ai, un sentiment. Peut-on le faire? Et si oui, comment?

Pendant que nous sommes sur le sujet: si je voulais inclure un autre champ qui capturait la date et l'heure de la dernière mise à jour de l'enregistrement, comment ferais-je?.

J'espère ne pas le faire manuellement.

Merci beaucoup

Mike

29
RocketGoal

Vous devez définir la "valeur par défaut" pour le champ de date sur getdate(). Tous les enregistrements insérés dans la table auront automatiquement la date d'insertion comme valeur pour ce champ.

L'emplacement de la propriété "valeur par défaut" dépend de la version de SQL Server Express que vous exécutez, mais elle doit être visible si vous sélectionnez le champ de date de votre table lors de la modification de la table.

41
Ant

Oui, voici un exemple:

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

Vous pouvez INSÉRER dans le tableau sans indiquer les colonnes createdDate et updatedDate:

INSERT INTO myTable (col1) VALUES (1)

Ou utilisez le mot-clé DEFAULT:

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

Créez ensuite un déclencheur pour mettre à jour la colonne 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
32
Kevin