时态表系统一致性检查
适用于:SQL Server 2016 (13.x) 及更高版本 Azure SQL 数据库 Azure SQL 托管实例
使用时态表时,系统将执行若干一致性检查以确保架构符合临时要求,而且数据一致且将始终一致。 此外,DBCC CHECKCONSTRAINTS
语句中提供了时态检查。
系统一致性检查
在将 SYSTEM_VERSIONING
设置为 ON
之前,系统将对历史记录表和当前表执行一系列检查。 如果历史记录表不为空,则这些检查分为架构检查和数据检查。 此外,系统还会执行运行时一致性检查。
架构检查
创建表或将表更改为临时表时,系统将验证其是否满足这些要求:
当前表和历史记录表中的列名和列数相同。
当前表与历史记录表中每一列的数据类型都一致。
将时间段列设置为
NOT NULL
。当前表有主键约束,而历史记录表没有主键约束。
历史记录表中未定义任何
IDENTITY
列。历史记录表中未定义任何触发器。
历史记录表中未定义任何外键。
历史记录表中未定义任何表或列约束。 但是,允许使用历史记录表上的默认列值。
不会将历史记录表置于只读文件组中。
历史记录表未配置更改跟踪或变更数据捕获。
数据一致性检查
将 SYSTEM_VERSIONING
设置为 ON
并将之作为任何数据操作语言 (DML) 操作的一部分之前,系统将执行以下检查:ValidTo >= ValidFrom
创建现有历史记录表的链接时,可以选择执行数据一致性检查。 此数据一致性检查可确保现有记录不重叠,并且每个单独的记录都满足时态要求。 系统默认执行数据一致性检查。 当前表和历史记录表之间的数据可能不同步时,应执行数据一致性检查。例如纳入已填充历史记录数据的现有历史记录表时。
警告
手动更改系统时钟可能会导致系统意外失败,原因是为防止出现重叠情况(即记录的结束时间不晚于其开始时间),而进行的运行时数据一致性检查将失败。
使用 DBCC CHECKCONSTRAINTS
DBCC CHECKCONSTRAINTS
命令包括时态数据一致性检查。 有关详细信息,请参阅 DBCC CHECKCONSTRAINTS。