时态表系统一致性检查

适用于: 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 (Transact-SQL)

后续步骤