-1

我有下表

CREATE TABLE T3
(
  DD DATETIME DEFAULT CURRENT_TIMESTAMP
)

当开始通过这个向 T3 插入行时:

INSERT T3 SELECT 1;

我明白了

1900-01-02 00:00:00.000
1900-01-02 00:00:00.000
1900-01-02 00:00:00.000
1900-01-02 00:00:00.000

为什么是 1900 年的值?

我正在使用 sql server express 2012 。我机器上的时钟是最新的。

4

1 回答 1

4

如果没有明确的列列表,您INSERT T3将期望插入的值源包含表中除IDENTITY/ROWVERSION或计算列之外的每一列的值。

您的表有一个这样的列,并且SELECT语句源提供一列。所以结果是您正在1向 column插入一个显式整数值DD

该列的数据类型datetime需要隐式转换。结果SELECT CAST(1 AS DATETIME)就是1900-01-02您看到的结果。

遗留数据类型允许从和datetime隐式转换,并将数值视为 days since 。较新的数据类型,例如不支持这些隐式转换,而是会引发错误。intfloat1900-01-01datetime2

仅当您没有为该列插入显式值时,才会应用默认约束值。

在您的情况下,您可以通过以下方式执行此操作

INSERT T3 DEFAULT VALUES;

或者

INSERT T3 (DD) VALUES (DEFAULT)
于 2013-07-10T20:58:33.067 回答