2013-07-10 34 views
-1

我有以下表TSQL DEFAULT CURRENT_TIMESTAMP

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

你是怎么想到的是语句的行为将是?尝试首先理解“SELECT 1”背后的思想。 –

+0

呃你觉得默认的current_timestamp是做什么的? –

+0

我为什么得到-2?我有没有反对stackoverflow指导方针? –

回答

4

您的INSERT T3没有明确的列列表,预计插入的值的来源将包含表中的每个列的值,除了IDENTITY/ROWVERSION或计算列以外。

您的表有一个这样的列,并且SELECT语句源提供一列。所以结果就是你要插入一个明确的整数值1DD

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

遗留datetime数据类型允许intfloat隐式转换和自1900-01-01治疗的数值为天。较新的数据类型(如datetime2)不支持这些隐式转换,而是会引发错误。

默认约束值仅适用于未为该列插入明确值的情况。

你的情况,你可以做到这一点无论

INSERT T3 DEFAULT VALUES; 

或者

INSERT T3 (DD) VALUES (DEFAULT) 
+2

SQL Server中的“第0天”是1900-01-01 - 因此在1900-01-02中插入“1”结果 –

相关问题