2016-12-14 180 views
0

我目前正在學習在sql server 2016中引入的新「系統版本化時態表」。但是,我有點難以獲得我的腦海中圍繞着「GENERATED ALWAYS AS ROW START/END」和「PERIOD FOR SYSTEM_TIME」的確切含義和用法,這兩者都是系統版本化時態表所要求的。「GENERATED ALWAYS AS ROW START/END」和「PERIOD FOR SYSTEM_TIME」

有人可以請給我解釋一下嗎?預先感謝任何幫助!

CREATE TABLE dbo.Employees 
(
    empid INT NOT NULL CONSTRAINT PK_Employees PRIMARY KEY NONCLUSTERED, 
    empname VARCHAR(25) NOT NULL, 
    department VARCHAR(50) NOT NULL, 
    salary NUMERIC(10, 2) NOT NULL, 

    sysstart DATETIME2(0) GENERATED ALWAYS AS ROW START HIDDEN NOT NULL, 

    sysend DATETIME2(0) GENERATED ALWAYS AS ROW END HIDDEN NOT NULL, 

    PERIOD FOR SYSTEM_TIME(sysstart, sysend), 
    INDEX ix_Employees CLUSTERED(empid, sysstart, sysend) 
) 

WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.EmployeesHistory) 
); 

回答

1

態表中的SQL服務器2016

這是SQL Server 2016,後來一個驚人的新功能。

In Quick points,什麼是時態表?

  • 在2011by ANSI/ISO介紹了SQL
  • IBM DB2 &的Oracle 10g,11g和12C是嚐鮮。
  • 旨在保持數據更改的完整歷史記錄,並允許簡單的時間點分析。
  • 每個時態表都有兩個明確定義的列,每個列都有一個datetime2數據類型。

MSDN

一種系統,版本化態表必須有一個主鍵定義和 恰好具有一個期間爲2 DATETIME2 列定義SYSTEM_TIME,聲明爲ALWAYS GENERATED AS ROW開始/結束

所以A system-versioned表的主鍵(考慮作爲臨時表的暱稱)已定義並且恰好具有一個PERIOD FOR SYSTEM_TIME定義的機智h兩次或允許在一次分析變得更簡單點或時間旅行As Mr.Borko Novakovic said at Channel 9),DATETIME2列聲明爲GENERATED ALWAYS AS ROW START/END

快一點,現在,是有必要界定GENERATED ALWAYS AS ROW START

NO, it is not技術上,但在實際的商業生活中應該是。

參考文獻:

0

系統版本時空表使用的時間單位用於跟蹤任何行更改類型的使用2列DateTime2(開始和結束時間)。通過使用DateTime2,SQL可以獲得準確的時間,而不考慮時區。

SYSTEM_TIME被用作PERIOD,通過檢查開始時間和結束時間,並且此字段還使用select語句從事務和歷史記錄表中獲取歷史記錄。

SELECT * FROM [Your_Table] 
    FOR SYSTEM_TIME  
     BETWEEN '2014-01-01 00:00:00.0000000' AND '2015-01-01 00:00:00.0000000'