我有这个具体问题。我正在运行Microsoft SQL Server Management Studio(13.0.16000.28),我想创建时态表Price。我想将'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]));
但是,当我在表格中插入数据时
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设置为任何我总是得到相同的结果。
我很感激每一个答案。
答案 0 :(得分:2)
我选择了专栏' ValidFrom'作为' 2017-08-09 11:18:30'为什么我没有得到默认值' 1900-01-01 00:00:00'如预期的那样?
它按预期工作。你的假设是错误的。来自Temporal Tables:
插入:
在INSERT上,系统根据系统时钟将SysStartTime列的值设置为当前事务的开始时间(在UTC时区中),并将SysEndTime列的值分配给最大值值9999-12-31。这标志着该行是开放的。