xml地图|网站地图|网站标签 [设为首页] [加入收藏]
当前位置: www8029com > 澳门新葡8522最新网站 > 正文

【澳门新葡8522最新网站】带你熟谙SQLServer二零一

时间:2019-12-14 22:07来源:澳门新葡8522最新网站
什么是 System-Versioned Temporal Table? System-Versioned TemporalTable,权且容笔者管它叫版本由系统调节的有时表,它是 SQL Server 二零一四中的新型客商表,用于保留完整的数目变动历史记录。它

什么是 System-Versioned Temporal Table?

System-Versioned Temporal Table,权且容笔者管它叫版本由系统调节的有时表,它是 SQL Server 二零一四中的新型客商表,用于保留完整的数目变动历史记录。 它之所以称之为版本由系统调整的有时表,是因为每大器晚成行的有效期由数据库引擎处理。

澳门新葡8522最新网站,种种有的时候表有四个显式定义的列,个中种种列都有三个 datetime2 数据类型。每当数据改正后,系统将以垄断方式利用那几个列来记录每行的保藏期。

除开这个列以外,该表还蕴藏对利用镜像构造的另四个历史表的引用。 每当更新或删除了有的时候表中的某行后,系统将动用历史表来自动累积该行的先前版本。

以此有时表的临蓐,在任天由命程度上完全能够取代CDC,可用于ETL,追溯数据,审计等。在此之前CDC能用到之处那一个会越来越好用且更易维护。其余,以前约定让程序猿更新数据时必需立异UpdateTime之类的约定也统统能够交由系统协调决定了。

始建语法:

CREATE TABLE MyTable
(
 Id BIGINT IDENTITY(1,1) NOT NULL PRIMARY KEY
,MyCode CHAR(5)
,MyName NVARCHAR(200)
,RecordStartTime DATETIME2 GENERATED ALWAYS AS ROW START NOT NULL
,RecordEndTime DATETIME2 GENERATED ALWAYS AS ROW END NOT NULL
,PERIOD FOR SYSTEM_TIME(RecordStartTime,RecordEndTime)
) 
WITH(SYSTEM_VERSIONING = ON); 

建好后,在SSMS中是其同样子的:

澳门新葡8522最新网站 1

鉴于尚未点名历史表的名目,历史表自动被命名字为MSSQL_TemporalHistoryFor_前缀再加上原始表的objectID.

剔除表时必得先试行关闭表的类别版本按钮,不然会报错:

澳门新葡8522最新网站 2

ALTER TABLE MyTable SET (SYSTEM_VERSIONING = OFF)

关门之后,在SSMS中都成了普通表。

澳门新葡8522最新网站 3

去除之后以给定历史表的名字重新建立(这里历史表的名字指依期必须钦点schema,不然会报错):

CREATE TABLE MyTable
(
 Id BIGINT IDENTITY(1,1) NOT NULL PRIMARY KEY
,MyCode CHAR(5)
,MyName NVARCHAR(200)
,RecordStartTime DATETIME2 GENERATED ALWAYS AS ROW START NOT NULL
,RecordEndTime DATETIME2 GENERATED ALWAYS AS ROW END NOT NULL
,PERIOD FOR SYSTEM_TIME(RecordStartTime,RecordEndTime)
) 
WITH(SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.MyTableHistory)); 

 插入数据:

INSERT INTO [MyTable]([MyCode],[MyName])VALUES('SH001','万剑齐发'),('SH002','ajiangg');
SELECT * FROM [MyTable];

澳门新葡8522最新网站 4

履新/删除数据后的结果:

UPDATE [MyTable] SET MyCode = 'SH003' WHERE ID = 1;
DELETE FROM [MyTable] WHERE ID = 2;
SELECT * FROM [MyTable];
SELECT * FROM [MyTableHistory];

澳门新葡8522最新网站 5

先关闭SYSTEM_VEPRADOSIONING,校订历史表名,比量齐观复展开SYSTEM_VE中华VSIONING,即达成了历史表的存档(当然,那样归档的话,归档的那部分多少也就失去了运用FOTiguanSYSTEM_TIME语法查询的力量了卡塔尔(英语:State of Qatar):

ALTER TABLE MyTable SET (SYSTEM_VERSIONING = OFF);
EXEC sp_rename 'MyTableHistory', 'MyTableHistory_20170303';
ALTER TABLE MyTable SET (SYSTEM_VERSIONING = ON(HISTORY_TABLE = dbo.MyTableHistory));

澳门新葡8522最新网站 6

追溯历史数据:

  SELECT * FROM [MyTable];
  SELECT * FROM [MyTableHistory];
  SELECT * FROM [MyTable]
  FOR SYSTEM_TIME    
        BETWEEN '2017-03-03 15:43:57.7006650' AND '9999-12-31 23:59:59.9999999' 

澳门新葡8522最新网站 7

追溯历史数据查询2(数据存在最早时间低于等于2017-03-03 15:43:57.7006650,且终止时间超过这些小时的Id为2的数目):

澳门新葡8522最新网站 8

 

关于历史数据的追溯的新条件写法FOEvoque SYSTEM_TIME ****,帮忙以下两种语法:

表达式 符合条件的行 说明
AS OF<date_time> SysStartTime <= date_time AND SysEndTime > date_time 返回一个表,其行中包含过去指定时间点的实际(当前)值。 在内部,将在临时表及其历史记录表之间进行联合,然后筛选结果以返回在 <date_time> 参数指定的时间点有效的行中的值。 如果 system_start_time_column_name 值小于或等于 <date_time> 参数值,且 system_end_time_column_name 值大于 <date_time> 参数值,则此行的值被视为有效。
FROM<start_date_time>TO<end_date_time> SysStartTime < end_date_time AND SysEndTime > start_date_time 返回一个表,其中包含在指定的时间范围内保持活动状态的所有行版本的值,不管这些版本是在 FROM 自变量的 <start_date_time> 参数之前开始活动,还是在 TO 自变量的 <end_date_time> 参数值之后停止活动。 在内部,将在临时表及其历史记录表之间进行联合,然后筛选结果,以返回在指定时间范围内任意时间保持活动状态的所有行版本的值。 正好在 FROM 终结点定义的下限时间激活的行将包括在内,正好在 TO 终结点定义的上限时间激活的记录将被排除。
BETWEEN<start_date_time>AND<end_date_time> SysStartTime <= end_date_time AND SysEndTime > start_date_time 与上面的 FOR SYSTEM_TIME FROM <start_date_time>TO <end_date_time> 描述相同,不过,返回的行表包括在 <end_date_time> 终结点定义的上限时间激活的行。
CONTAINED IN (<start_date_time> , <end_date_time>) SysStartTime >= start_date_time AND SysEndTime <= end_date_time 返回一个表,其中包含在 CONTAINED IN 参数的两个日期时间值定义的时间范围内打开和关闭的所有行版本的值。 正好在下限时间激活的记录,或者在上限时间停止活动的行将包括在内。
ALL 所有行 返回属于当前表和历史记录表的行的联合。

创办表时,关于GENERATED ALWAYS AS ROW START/END列还或者有个HIDDEN选用,那在局地本人感到的不标准SQL写法中会某个分裂(举例Insert时不点名插入的列,查询数据时利用select *等)

另外,不打开SYSTEM_VE卡宴SIONING开关的普通表,也能让GENERATED ALWAYS AS ROW START的标志列自动更新更新时间。(例如如下脚本中开创的表,UpdateTime列会被系统自动更新为最后叁遍立异的年华卡塔尔(قطر‎

CREATE TABLE MyTable
(
 Id BIGINT IDENTITY(1,1) NOT NULL PRIMARY KEY
,MyCode CHAR(5)
,MyName NVARCHAR(200)
,UpdateTime DATETIME2 GENERATED ALWAYS AS ROW START NOT NULL
,RecordEndTime DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL
,PERIOD FOR SYSTEM_TIME(RecordStartTime,RecordEndTime)
);

好了,关于System-Versioned Temporal Table,就介绍到这啦。

本文链接:

参照链接:

编辑:澳门新葡8522最新网站 本文来源:【澳门新葡8522最新网站】带你熟谙SQLServer二零一

关键词: www8029com