Ваш INSERT T3
без явного списка столбцов ожидает источник значений для вставки, который содержит значение для каждого столбца в таблице, кроме IDENTITY
/ROWVERSION
или вычисленных столбцов.
В вашей таблице есть один такой столбец, а источник предложения SELECT
поставляет один столбец. Таким образом, результат заключается в том, что вы вставляете явное целочисленное значение 1
в столбец DD
.
Этот тип данных столбца - datetime
, требующий неявного литья. Результат SELECT CAST(1 AS DATETIME)
равен 1900-01-02
, следовательно, результаты, которые вы видите.
Наследие datetime
позволяют неявные типы данных слепки с int
и float
и обрабатывать числовые значения, как дни, так как 1900-01-01
. Новейшие типы данных, такие как datetime2
, не поддерживают эти неявные выражения и вместо этого будут вызывать ошибку.
Значения ограничений по умолчанию применяются только тогда, когда вы не вставляете явное значение для этого столбца.
В вашем случае вы можете сделать это либо
INSERT T3 DEFAULT VALUES;
Или
INSERT T3 (DD) VALUES (DEFAULT)
Что вы ожидаете, что поведение этого заявления должен был быть? Попытка понять мышление за «SELECT 1» в первую очередь. –
erm Что вы думаете по умолчанию current_timestamp? –
Почему я получил -2? Я сделал что-то против рекомендаций stackoverflow? –