时态表系统一致性检查

适用于:SQL Server 2016 (13.x) 及更高版本 Azure SQL 数据库 Azure SQL 托管实例

使用时态表时,系统将执行若干一致性检查以确保架构符合临时要求,而且数据一致且将始终一致。 此外,DBCC CHECKCONSTRAINTS 语句中提供了时态检查。

系统一致性检查

在将 SYSTEM_VERSIONING 设置为 ON 之前,系统将对历史记录表和当前表执行一系列检查。 如果历史记录表不为空,则这些检查分为架构检查和数据检查。 此外,系统还会执行运行时一致性检查。

架构检查

创建表或将表更改为临时表时,系统将验证其是否满足这些要求:

  1. 当前表和历史记录表中的列名和列数相同。

  2. 当前表与历史记录表中每一列的数据类型都一致。

  3. 将时间段列设置为 NOT NULL

  4. 当前表有主键约束,而历史记录表没有主键约束。

  5. 历史记录表中未定义任何 IDENTITY 列。

  6. 历史记录表中未定义任何触发器。

  7. 历史记录表中未定义任何外键。

  8. 历史记录表中未定义任何表或列约束。 但是,允许使用历史记录表上的默认列值。

  9. 不会将历史记录表置于只读文件组中。

  10. 历史记录表未配置更改跟踪或变更数据捕获。

数据一致性检查

SYSTEM_VERSIONING 设置为 ON 并将之作为任何数据操作语言 (DML) 操作的一部分之前,系统将执行以下检查:ValidTo >= ValidFrom

创建现有历史记录表的链接时,可以选择执行数据一致性检查。 此数据一致性检查可确保现有记录不重叠,并且每个单独的记录都满足时态要求。 系统默认执行数据一致性检查。 当前表和历史记录表之间的数据可能不同步时,应执行数据一致性检查。例如纳入已填充历史记录数据的现有历史记录表时。

警告

手动更改系统时钟可能会导致系统意外失败,原因是为防止出现重叠情况(即记录的结束时间不晚于其开始时间),而进行的运行时数据一致性检查将失败。

使用 DBCC CHECKCONSTRAINTS

DBCC CHECKCONSTRAINTS 命令包括时态数据一致性检查。 有关详细信息,请参阅 DBCC CHECKCONSTRAINTS