2

我有这个特定的问题。我正在运行 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 设置为任何我总是得到相同的结果。

我感谢每一个答案。

4

1 回答 1

2

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

它按预期工作。你的假设是错误的。从临时表

插入:

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

于 2017-08-09T11:45:18.963 回答