【发布时间】:2018-08-27 11:28:19
【问题描述】:
Temporal Tables 是SQL Server 2016 及更高版本的新功能,它就像SQL Server 自动将历史数据保存在表中的一种有趣方式,但是有一些新的T- SQL Server 2016 中引入的 SQL 语法以支持临时表。我对他们中的一些人有误解。
来自official documentationBETWEEN <start_date_time> AND <end_date_time>的描述如下:
FOR SYSTEM_TIME FROM TO 同上 描述,返回的行表除外 包括在由 端点。
CONTAINED IN (<start_date_time>, <end_date_time>)的描述如下:-
返回一个表,其中包含已打开的所有行版本的值 并在两个日期时间定义的指定时间范围内关闭 CONTAINED IN 参数的值。准确激活的行 在下边界上或在上边界上停止活动 包括边界。
所以我理解,CONTAINED IN (@start,@end) 和 BETWEEN 子句之间的唯一区别是 CONTAINED IN (@start, @end) 包含 @start 边界,而 BETWEEN 子句不包含。我说的对吗?
【问题讨论】:
-
你问
@Start边界是否包含在BETWEEN子句中? -
不,我知道
@Start不包括在内。我在问下一个陈述是否正确? CONTAINED IN 的返回结果与 BETWEEN 相同,只是 CONTAINED IN 包含在 @Start 边界中,而 BETWEEN 不包含 对吗?谢谢。 -
你只是回答你的问题,两种情况下的结果会有所不同。
-
我在问这是唯一的区别吗?
-
CONTAINED IN 仅返回存在于指定期间边界内的那些。如果您只搜索非当前行版本,CONTAINED IN 将是最佳选择,因为它仅适用于历史表并且会产生最佳查询性能。
标签: sql-server sql-server-2016 temporal-tables