Не удалось добавить новый столбец в таблицу SQL Server с типом данных TIMESTAMP

#sql #sql-server

#sql #sql-server

Вопрос:

Я пытаюсь добавить новый столбец в существующую таблицу SQL Server с типом данных TIMESTAMP .

Это мой сценарий:

 ALTER TABLE OrderDetails 
    ADD ModifiedTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
  

Он не должен быть нулевым. Запуск этого сценария приводит к ошибке

Невозможно создать значения по умолчанию для столбцов типа данных timestamp

Я попытался выполнить его без DEFAULT CURRENT_TIMESTAMP . Но затем он говорит

Не удается вставить значение NULL в столбец ‘ModifiedTime’

Какие-либо советы, пожалуйста?

Комментарии:

1. Просто небольшое замечание, что значения по умолчанию будут использоваться только в случае вставки новых данных, поэтому будет лучше назвать столбец как createdTime (или At) вместо modifiedTime . Просто предложение.

Ответ №1:

TIMESTAMP в SQL Server не имеет абсолютно ничего общего с датой и временем (спасибо Sybase за то, что он это испортил!) — это просто внутренний двоичный счетчик системы (часто используется для оптимизированных проверок параллелизма). Он также устарел и переименован ROWVERSION , что намного понятнее относительно того, что это такое.

Для даты и времени — используйте DATE (если вам нужна только дата — без времени) или DATETIME2(n) типы данных:

 ALTER TABLE OrderDetails 
    ADD ModifiedTime DATETIME2(3) NOT NULL DEFAULT CURRENT_TIMESTAMP
  

Дополнительные сведения о типах данных и функциях даты и времени см. В официальных документах Microsoft

Комментарии:

1. Отлично… Большое вам спасибо. Я не знал, что TIMESTAMP устарел. Пометит это как ответ.

Ответ №2:

Попробуйте следующее решение, представленное здесь: https://www.sql-server-performance.com/defaults-not-created-timestamp /

 ALTER TABLE OrderDetails ADD ModifiedTime TIMESTAMP NOT NULL DEFAULT 0
  

Комментарии:

1. Спасибо за ваше время. Я уже пробовал это раньше. Но та же ошибка.