ValidFrom 的临时 table 默认约束不起作用
Temporal table default constraint for ValidFrom does not work
我有这个具体问题。我是 运行 Microsoft SQL Server Management Studio (13.0.16000.28),我想创建临时 table 价格。我想将 'ValidFrom' 列设置为默认值,例如“1900-01-01 00:00:00”。我是 运行 的代码是
CREATE TABLE [DWH_STORE].[dbo].[Price] (
ID int,
ProdName nvarchar(40),
Price int,
ValidFrom datetime2(0) GENERATED ALWAYS AS ROW START CONSTRAINT DF_ValidFrom DEFAULT '1900-01-01 00:00:00' NOT NULL,
ValidTo datetime2(0) GENERATED ALWAYS AS ROW END NOT NULL,
PERIOD FOR SYSTEM_TIME ( ValidFrom, ValidTo),
CONSTRAINT PK_ID_ProdName PRIMARY KEY (ID, ProdName)
) WITH ( SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[PriceHistory]));
但是,当我在 table
中插入数据时
INSERT INTO [DWH_STORE].[dbo].[Price] (ID, ProdName, Price)
VALUES (12, 'Banana', 1)`
SELECT * FROM [DWH_STORE].[dbo].[Price]
我明白了
第 'ValidFrom' 列为“2017-08-09 11:18:30”。为什么我没有按预期获得该列的默认值“1900-01-01 00:00:00”?
插入时我的 Sysdatetime() 是“2017-08-09 13:18:30”
我尝试将 DEFAULT 设置为 Sysdatetime() 以获取当前日期和时间,但这也不起作用。似乎如果我将 DEFAULT 设置为任何值,我总是会得到相同的结果。
感谢每一个回答。
I got with column 'ValidFrom' as '2017-08-09 11:18:30'. Why I do not get the default value '1900-01-01 00:00:00' for that column as expected?
它按预期工作。你的假设是错误的。来自 Temporal Tables:
INSERTS:
On an INSERT, the system sets the value for the SysStartTime column to the begin time of the current transaction (in the UTC time zone) based on the system clock and assigns the value for the SysEndTime column to the maximum value of 9999-12-31. This marks the row as open.
我有这个具体问题。我是 运行 Microsoft SQL Server Management Studio (13.0.16000.28),我想创建临时 table 价格。我想将 'ValidFrom' 列设置为默认值,例如“1900-01-01 00:00:00”。我是 运行 的代码是
CREATE TABLE [DWH_STORE].[dbo].[Price] (
ID int,
ProdName nvarchar(40),
Price int,
ValidFrom datetime2(0) GENERATED ALWAYS AS ROW START CONSTRAINT DF_ValidFrom DEFAULT '1900-01-01 00:00:00' NOT NULL,
ValidTo datetime2(0) GENERATED ALWAYS AS ROW END NOT NULL,
PERIOD FOR SYSTEM_TIME ( ValidFrom, ValidTo),
CONSTRAINT PK_ID_ProdName PRIMARY KEY (ID, ProdName)
) WITH ( SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[PriceHistory]));
但是,当我在 table
中插入数据时INSERT INTO [DWH_STORE].[dbo].[Price] (ID, ProdName, Price)
VALUES (12, 'Banana', 1)`
SELECT * FROM [DWH_STORE].[dbo].[Price]
我明白了
第 'ValidFrom' 列为“2017-08-09 11:18:30”。为什么我没有按预期获得该列的默认值“1900-01-01 00:00:00”?
插入时我的 Sysdatetime() 是“2017-08-09 13:18:30”
我尝试将 DEFAULT 设置为 Sysdatetime() 以获取当前日期和时间,但这也不起作用。似乎如果我将 DEFAULT 设置为任何值,我总是会得到相同的结果。
感谢每一个回答。
I got with column 'ValidFrom' as '2017-08-09 11:18:30'. Why I do not get the default value '1900-01-01 00:00:00' for that column as expected?
它按预期工作。你的假设是错误的。来自 Temporal Tables:
INSERTS:
On an INSERT, the system sets the value for the SysStartTime column to the begin time of the current transaction (in the UTC time zone) based on the system clock and assigns the value for the SysEndTime column to the maximum value of 9999-12-31. This marks the row as open.