-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 を使用しています。私のマシンの時計は current です。

4

1 に答える 1

4

明示的な列リストがない場合は、 /または計算列INSERT T3を除く、テーブル内のすべての列の値を含む挿入の値のソースが必要になります。IDENTITYROWVERSION

テーブルにはそのような列が 1 つあり、SELECTステートメント ソースは 1 つの列を提供します。その結果、明示的な整数値1を columnに挿入することになりますDD

その列のデータ型にはdatetime暗黙的なキャストが必要です。したがって、の結果SELECT CAST(1 AS DATETIME)は、表示さ1900-01-02れる結果です。

従来のデータ型では、 anddatetimeからの暗黙的なキャストが可能で、数値を からの日数として扱います。などの新しいデータ型は、これらの暗黙的なキャストをサポートしていないため、代わりにエラーが発生します。intfloat1900-01-01datetime2

デフォルトの制約値は、その列に明示的な値を挿入しない場合にのみ適用されます。

あなたの場合、これは次のいずれかで行うことができます

INSERT T3 DEFAULT VALUES;

または

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