ValidFrom的临时表默认约束不起作用

时间:2017-08-09 11:41:37

标签: sql date constraints sql-server-2016 temporal-tables

我有这个具体问题。我正在运行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]

我得到了

result

列'ValidFrom'为'2017-08-09 11:18:30'。为什么我没有按预期获得该列的默认值'1900-01-01 00:00:00'?

插入时的我的Sysdatetime()是'2017-08-09 13:18:30'

我尝试将DEFAULT设置为Sysdatetime()以获取当前日期和时间,但这也不起作用。似乎如果我将DEFAULT设置为任何我总是得到相同的结果。

我很感激每一个答案。

1 个答案:

答案 0 :(得分:2)

  

我选择了专栏' ValidFrom'作为' 2017-08-09 11:18:30'为什么我没有得到默认值' 1900-01-01 00:00:00'如预期的那样?

它按预期工作。你的假设是错误的。来自Temporal Tables

  

插入:

     

在INSERT上,系统根据系统时钟将SysStartTime列的值设置为当前事务的开始时间(在UTC时区中),并将SysEndTime列的值分配给最大值值9999-12-31。这标志着该行是开放的。