2010-03-16 11 views
23

Je mets en place une base de données de test simple pour apprendre MVC avec. Je veux ajouter un champ DateTime pour montrer quand l'enregistrement a été créé.Création automatique d'un champ DateTime dans une base de données?

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

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

Alors que nous sommes sur le sujet: si je voulais inclure un autre champ qui a capturé le DateTime de quand l'enregistrement a été mis à jour, comment pourrais-je faire cela.

J'espère ne pas le faire manuellement.

Un grand merci

Mike

Répondre

30

Vous devez définir la "valeur par défaut" pour le champ de date à 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 il doit être visible si vous sélectionnez le champ date de votre table lors de la modification de la table.

+0

J'ai modifié le champ à DateTime2 (7) et mettre GETDATE() dans la valeur par défaut. Cependant, quand une vue la table se contente et essaye d'entrer dans les données je reçois un 'ne peut pas contenir l'erreur nulle' en tabulant dehors du champ DateTime - évidemment je n'ai rien mis en dedans car je m'attendais à ce qu'il soit automatiquement mis à jour . En outre, j'utilise Visual Web Developer 2008 Express Edition (qui, je crois utilise le paquet de base de données SQL Express). – RocketGoal

+0

@Mike - Rendre la colonne NULL aussi et puis cela devrait fonctionner –

+0

J'ai trouvé le problème - Je n'avais pas mis ma colonne ID à Identity alors l'énorme message me montrait que ma colonne d'identifiant était incorrecte et pas mon DateTime. J'ai appris. Excuses. Mais ça fonctionne. Merci beaucoup. – RocketGoal

21

Oui, voici un exemple:

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

Vous pouvez insérer dans la table sans indiquer les colonnes CreatedDate et updatedDate:

INSERT INTO myTable (col1) VALUES (1) 

Ou utiliser le mot-clé DEFAULT:

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

Ensuite, créez 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 
+0

Merci, mais je suis vraiment au début de mon expérience SQL, donc j'utilise l'IDE pour m'aider à faire une table. – RocketGoal