TSQL DEFAULT CURRENT_TIMESTAMP

时间:2013-07-10 20:56:16

标签: sql-server tsql sql-server-2012-express

我有下表

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。我机器上的时钟是最新的。

1 个答案:

答案 0 :(得分:4)

没有显式列列表的INSERT T3将期望插入的值源包含除IDENTITY / ROWVERSION或计算列之外的表中每列的值。< / p>

您的表有一个这样的列,SELECT语句源提供一列。因此,结果是您向列1插入显式整数值DD

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

旧版datetime数据类型允许来自intfloat的隐式强制转换,并将数值视为1900-01-01后的天数。较新的数据类型(如datetime2)不支持这些隐式转换,而是会引发错误。

默认约束值仅在未为该列插入显式值时应用。

在您的情况下,您可以通过

执行此操作
INSERT T3 DEFAULT VALUES;

INSERT T3 (DD) VALUES (DEFAULT)