Sql ValidFrom的时态表默认约束无效

Sql ValidFrom的时态表默认约束无效,sql,date,constraints,sql-server-2016,temporal-tables,Sql,Date,Constraints,Sql Server 2016,Temporal Tables,我有一个特别的问题。我正在运行MicrosoftSQLServerManagementStudio(13.0.16000.28),我想创建临时价格表。我想将“ValidFrom”列设置为默认值,例如“1900-01-01 00:00:00”。我正在运行的代码是 CREATE TABLE [DWH_STORE].[dbo].[Price] ( ID int, ProdName nvarchar(40), Price int, ValidFrom datetime2(0) GENER

我有一个特别的问题。我正在运行MicrosoftSQLServerManagementStudio(13.0.16000.28),我想创建临时价格表。我想将“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'

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

我感谢你的每一个回答

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

它正在按预期工作。你的假设是错误的。发件人:

插入:

在插入时,系统根据系统时钟将SysStartTime列的值设置为当前事务的开始时间(UTC时区),并将SysEndTime列的值指定为最大值9999-12-31。这会将该行标记为打开。


好的,谢谢。问题是如何实现SysStartTime列的值将具有默认值,例如“dateadd(dd,(-1),SYSDATETIME())”—昨天???@PeterNagy—如果您想控制datetime值,那么您就不需要系统版本的时态表,这是此功能的更完整的名称。谢谢@Damien_。如果我没有弄错,这只是因为系统版本化时态表的限制(不管怎样,我不明白如果不能使用datetime值,为什么可以为它们设置默认值)。我应该使用什么来控制datetime值而不是系统版本的时态表?在INSERT for ValidFrom中使用DEFAULT关键字怎么样?如果表中已经有数据,那么在ALTER TABLE情况下,列的默认值可能更有意义。