时间:2021-07-01 10:21:17 帮助过:10人阅读
以下是查询的例子:
SELECT * FROM Employee
FOR SYSTEM_TIME
BETWEEN ‘2014-01-01 00:00:00.0000000‘ AND ‘2015-01-01 00:00:00.0000000‘
WHERE EmployeeID = 1000 ORDER BY ValidFrom;
注意:
FOR SYSTEM_TIME会过滤掉SysStartTime=SysEndTime的数据。这些行在同一个事务里面操作了同一行儿产生。只能通过查询历史表才能返回
关于SYSTEM_TIME过滤
| 表达式 | 符合条件的行 | Description |
|---|---|---|
| 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 | 所有行 | 返回属于当前表和历史记录表的行的联合。 |
SQL Server 2016新特性:Temporal Table
标签:cluster 有效期 ons color server 过滤 prim key create