我目前正在学习sql server 2016中引入的新的“系统版本化的时态表”。但是,我很难理解“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)
);

最佳答案

SQL Server 2016中的临时表

这是SQL Server 2016及更高版本中的一个令人惊奇的新功能。

在快速点中,什么是时态表?

  • 由ANSI/ISO于2011年针对SQL引入
  • IBM DB2和Oracle 10g,11g和12c是早期采用者。
  • 旨在保留数据更改的完整历史记录,并允许进行简单的时间点分析。
  • 每个临时表都有两个显式定义的列,每个列都有datetime2数据类型。

  • MSDN



    因此,定义了system-versioned表的主键(将其视为时间表的昵称),并定义了一个准确的PERIOD FOR SYSTEM_TIME和两个datetime2列,以便于进行简单的时间点分析或时空旅行(As Mr.Borko Novakovic said at Channel 9),声明为GENERATED ALWAYS AS ROW START / END
    引用:
  • Temporal Tables
  • Creating a System-Versioned Temporal Table
  • Temporal in SQL Server 2016 - Video.
  • 关于sql - "GENERATED ALWAYS AS ROW START/END"和"PERIOD FOR SYSTEM_TIME",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41132657/

    10-17 02:16