Создание поля DateTime в базе данных автоматически? - PullRequest
29 голосов
/ 16 марта 2010

Я собираю простую тестовую базу данных для изучения MVC. Я хочу добавить поле DateTime, чтобы показать, когда была создана запись.

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

У меня такое ощущение, что этот тип захвата DateTime можно сделать автоматически - но это все, что у меня есть, чувство. Это можно сделать? И если да, то как?

Пока мы обсуждаем эту тему: если бы я хотел включить другое поле, которое захватывало бы DateTime, когда запись была ПОСЛЕДНЕГО ОБНОВЛЕНА, как бы я это сделал.

Я надеюсь не делать это вручную.

Большое спасибо

Mike

Ответы [ 2 ]

41 голосов
/ 16 марта 2010

Вам необходимо установить «значение по умолчанию» для поля даты на getdate().Любые записи, вставленные в таблицу, будут автоматически иметь дату вставки в качестве значения для этого поля.

Расположение свойства «значение по умолчанию» зависит от версии SQL Server Express, которую вы используете, но это должнобыть видимым, если вы выберете поле даты вашей таблицы при редактировании таблицы.

31 голосов
/ 16 марта 2010

Да, вот пример:

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

Вы можете ВСТАВИТЬ в таблицу, не указывая столбцы createDate и updatedDate:

INSERT INTO myTable (col1) VALUES (1)

Или используйте ключевое слово DEFAULT:

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

Затем создайте триггер для обновления столбца 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
...