我有下表
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。我机器上的时钟是最新的。
答案 0 :(得分:4)
没有显式列列表的INSERT T3
将期望插入的值源包含除IDENTITY
/ ROWVERSION
或计算列之外的表中每列的值。< / p>
您的表有一个这样的列,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)