Сделать поле DateTime в базе данных автоматическим?

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

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

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

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

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

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

Майк


person RocketGoal    schedule 16.03.2010    source источник


Ответы (3)


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

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

person Ant    schedule 16.03.2010
comment
Я изменил поле на DateTime2(7) и поместил GETDATE() в значение по умолчанию. Однако, когда я просматриваю содержимое таблицы и пытаюсь ввести данные, я получаю сообщение «не может содержать нулевую ошибку» при переходе из поля DateTime - очевидно, я ничего не добавлял в него, поскольку я ожидал, что оно будет автоматически обновлено . Кроме того, я использую Visual Web Developer 2008 Express Edition (который, как мне кажется, использует пакет базы данных SQL Express). - person RocketGoal; 17.03.2010
comment
@Mike - также сделайте столбец обнуляемым, и тогда он должен работать - person Mike Two; 17.03.2010
comment
Я обнаружил проблему - я не установил для своего столбца идентификатора значение «Идентификация», поэтому огромное сообщение фактически указывало на то, что мой столбец идентификатора был неверным, а не моим DateTime. Я выучил. Извинения. Но это работает. Большое спасибо. - person RocketGoal; 17.03.2010

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

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

Вы можете INSERT в таблицу без указания столбцов createdDate и updatedDate:

INSERT INTO myTable (col1) VALUES (1)

Или используйте ключевое слово ПО УМОЛЧАНИЮ:

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
person Kevin    schedule 16.03.2010
comment
Спасибо, но я действительно только начинаю знакомиться с SQL, поэтому я использую IDE, чтобы помочь мне создать таблицу. - person RocketGoal; 17.03.2010

Просто щелкните правой кнопкой мыши по этому столбцу, выберите свойства и напишите getdate()in Default value or binding.like image:

введите здесь описание изображения

Если вы хотите сделать это в CodeFirst в EF, вы должны добавить эти атрибуты перед определением столбца:

[Databasegenerated(Databaseoption.computed)]

эти атрибуты можно найти в System.ComponentModel.Dataannotion.Schema.

По моему первый вариант лучше))

person akbar    schedule 29.01.2020