2010-03-16 14 views
23

Estoy armando una base de datos de prueba simple para aprender MVC. Quiero agregar un campo DateTime para mostrar cuándo se creó el registro.Hacer que un campo DateTime en una base de datos sea automático?

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

Tengo la sensación de que este tipo de captura DateTime se puede hacer automáticamente - pero eso es todo lo que tengo, un sentimiento. Se puede hacer? Y si es así, ¿cómo?

Mientras hablamos sobre el tema: si quisiera incluir otro campo que capturara el DateTime de cuando el registro fue ÚLTIMA ACTUALIZACIÓN, ¿cómo lo haría?

Espero no hacer esto manualmente.

Muchas gracias

Mike

Respuesta

30

Es necesario que ajuste el "valor por defecto" para el campo de fecha de getdate(). Cualquier registro insertado en la tabla tendrá automáticamente la fecha de inserción como su valor para este campo.

La ubicación de la propiedad "valor predeterminado" depende de la versión de SQL Server Express que esté ejecutando, pero debería estar visible si selecciona el campo de fecha de su tabla al editar la tabla.

+0

He cambiado el campo a DateTime2 (7) y puse GETDATE() en el valor predeterminado. Sin embargo, cuando veo los contenidos de la tabla y trato de ingresar los datos, recibo un 'no puede contener un error nulo' cuando selecciono el campo DateTime, obviamente no puse nada porque esperaba que se actualizara automáticamente. . Además, estoy usando Visual Web Developer 2008 Express Edition (que creo que usa el paquete de base de datos SQL Express). – RocketGoal

+0

@Mike: también puede anular la columna y luego debería funcionar –

+0

Encontré el problema: no había configurado mi columna de ID en Identity, por lo que el gran mensaje en realidad me señalaba que mi columna de ID era incorrecta y no mi DateTime. He aprendido. Disculpas Pero funciona. Muchas gracias. – RocketGoal

21

Sí, aquí está un ejemplo:

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

usuario puede insertar en la tabla sin indicar los CreatedDate y updatedDate columnas:

INSERT INTO myTable (col1) VALUES (1) 

o utilizar la palabra clave DEFAULT:

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

A continuación, cree un activador para actualizar la columna 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

Gracias, pero estoy realmente al principio de mi experiencia SQL, así que estoy usando el IDE para ayudarme a crear una tabla. – RocketGoal

Cuestiones relacionadas