"GENERATED ALWAYS AS ROW START/END"和"PERIOD FOR SYSTEM_TIME"



我当前正在学习SQL Server 2016中引入的新"系统版本呈临时表"。但是,我很难围绕确切的含义和使用"始终为行启动/结束"one_answers" System_time的周期"的使用,这两者都是由System版本的暂时表所需的。

有人可以向我解释吗?预先感谢您的任何帮助!

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及以后的惊人新功能。

在快速点,什么是时间表?

  • 在2011年通过ANSI/ISO推出SQL
  • IBM DB2&甲骨文10g,11g和12c是早期采用者。
  • 旨在保持数据更改的完整历史并允许轻松的时间分析。
  • 每个时间表都有两个明确定义的列,每个列都有datetime2数据类型。

来自msdn

系统反复的时间表必须具有一个主键定义,并且 与两个dateTime定义的System_Time完全有一个周期2 列,称为生成,始终为行启动/结束

因此,已定义了system-versioned表的主要键(将其视为时间表的昵称),并在两个DateTime2列中定义了一个PERIOD FOR SYSTEM_TIME,以允许轻松的时间分析或 time Travel ((正如诺瓦科维奇先生在第9频道所说的那样,称为GENERATED ALWAYS AS ROW START / END

参考:

  • 时间表
  • 创建一个系统反复的时间表
  • SQL Server 2016中的时间 - 视频。

系统版本的时间表正在使用时间单位来跟踪使用2型dateTime2(启动和结束时间)的使用2列的行更改。通过使用dateTime2,无论时区如何,SQL获得精确的时间。

System_time通过检查开始和结束时间,将其用作期间,此字段也用于选择Select语句以获取事务和历史表的历史记录。

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

相关内容

最新更新