我有這個特定的問題。我正在運行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