Sql-Server
SQL 時態表包括目前狀態
我們想在 SQL Server 2016 中實現時態表。我們正在創建數據倉庫並開發類型 2 漸變維度表。
我們注意到歷史表只包含歷史。我們想要創建一個具有歷史和目前狀態的表(EndDate 為 Null 或 12/31/9999)。有什麼方法可以執行此操作,而無需創建 UNION 目前和歷史表的視圖?
如果我必須使用 UNION 視圖,SQL Server 是否優化了內部結構,因此對於 5000 萬行不會有任何性能問題?我必須將數據倉庫交給客戶和執行管理層,應該沒有任何明顯的區別。
CREATE TABLE dbo.Department ( DeptID INT NOT NULL PRIMARY KEY CLUSTERED, DeptName VARCHAR(50) NOT NULL, ManagerID INT NULL, ParentDeptID INT NULL, SysStartTime DATETIME2 GENERATED ALWAYS AS ROW START CONSTRAINT DF_Department_SysStartTime DEFAULT SYSUTCDATETIME() NOT NULL, SysEndTime DATETIME2 GENERATED ALWAYS AS ROW END CONSTRAINT DF_Department_SysEndTime DEFAULT CONVERT( DATETIME2, '9999-12-31 23:59:59' ) NOT NULL, PERIOD FOR SYSTEM_TIME(SysStartTime, SysEndTime) ) WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.DepartmentHistory));
時態表支持
FOR SYSTEM_TIME
語法。它的選項之一有效地為您執行 UNION。從文件中:SELECT * FROM my_table FOR SYSTEM_TIME ALL;
ALL 返回屬於目前表和歷史表的行的並集。