我有这个特定的问题。我正在运行Microsoft SQL Server Management Studio(13.0.16000.28),我想创建临时表格Price。我想将'ValidFrom'列设置为默认值,例如'1900-01-01 00:00:00'。我运行的代码是ValidFrom的时间表默认约束不起作用
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年8月9日13时18分三十〇秒”
我试图设置默认为SYSDATETIME()来获得当前日期和时间,而且不不工作。看来,如果我设置DEFAULT为任何我总是得到相同的结果。
我很感谢每一个答案。
好的,谢谢。问题是如何实现SysStartTime列的值将具有DEFAULT值,例如'dateadd(dd,( - 1),SYSDATETIME())' - 昨天? – Peter
@PeterNagy - 如果你想控制日期时间值,那么你不希望* system-versioned *时间表,这是一个更完整的名称为这个功能。 –
谢谢@Damien_The_Unbeliever。如果我明白了这一点,这仅仅是因为_system-versioned_时间表的限制(无论如何,我不明白为什么可以为日期时间值设置默认值,如果它们不能使用)。 我应该用什么来控制日期时间值而不是_system-versioned_临时表?在INSERT for ValidFrom中使用DEFAULT关键字怎么样? – Peter