#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. Спасибо за ваше время. Я уже пробовал это раньше. Но та же ошибка.