我目前正在学习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
及更高版本中的一个令人惊奇的新功能。
在快速点中,什么是时态表?
datetime2
数据类型。 从MSDN
因此,定义了
system-versioned
表的主键(将其视为时间表的昵称),并定义了一个准确的PERIOD FOR SYSTEM_TIME
和两个datetime2列,以便于进行简单的时间点分析或时空旅行(As Mr.Borko Novakovic said at Channel 9),声明为GENERATED ALWAYS AS ROW START / END
引用:
关于sql - "GENERATED ALWAYS AS ROW START/END"和"PERIOD FOR SYSTEM_TIME",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41132657/