Sql-Server

SQL 時態表包括目前狀態

  • October 11, 2018

我們想在 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 返回屬於目前表和歷史表的行的並集。

引用自:https://dba.stackexchange.com/questions/219823