适用于: SQL Server 2016 (13.x) 及以后版本
Azure SQL 数据库
Azure SQL 托管实例
Microsoft Fabric 中的 SQL 数据库
使用时间表时,系统会进行多次一致性检查。 这些检查可确保该模式符合时间约束,并确保数据当前一致且始终保持一致。 该 DBCC CHECKCONSTRAINTS 声明还提供了时序检查。
系统一致性检查
在将 SYSTEM_VERSIONING 设置为 ON 之前,系统将对历史记录表和当前表执行一系列检查。 这些检查分为模式检查和数据检查(如果历史表不是空的话)。 系统还执行运行时一致性检查。
模式检查
当你创建或修改表以变成时表时,系统会验证以下要求是否满足:
当前表和历史表中的名称和列数相同。
当前表和历史表之间的每列数据类型都匹配。
将时间段列设置为
NOT NULL。当前表有主键约束,而历史记录表没有主键约束。
历史记录表中未定义任何
IDENTITY列。历史记录表中未定义任何触发器。
历史记录表中未定义任何外键。
历史记录表中未定义任何表或列约束。 但是,允许使用历史记录表上的默认列值。
不会将历史记录表置于只读文件组中。
历史记录表未配置变更跟踪或变更数据捕获。
数据一致性检查
将 SYSTEM_VERSIONING 设置为 ON 并将之作为任何数据操作语言 (DML) 操作的一部分之前,系统将执行以下检查:ValidTo >= ValidFrom
当你创建指向现有历史表的链接时,可以选择执行数据一致性检查。 这种数据一致性检查确保现有记录不重叠,且每条记录都满足时间要求。 数据一致性检查默认运行。 当当前表和历史表之间的数据可能不同步时,进行数据一致性检查。例如,当你集成一个已经包含历史数据的现有历史表时,可以执行它。
警告
手动更改系统时钟会导致系统意外故障,因为防止重叠条件(即记录的结束时间不小于起始时间)的运行时数据一致性检查失败。
使用 DBCC CHECKCONSTRAINTS
DBCC CHECKCONSTRAINTS 命令包括时态数据一致性检查。 有关详细信息,请参阅 DBCC CHECKCONSTRAINTS。