处于过滤模式的约束或唯一索引可在 DML 操作期间将任何不符合该约束或索引的任何行插入到相关的违反表内。此模式还支持 WITH ERROR 和 WITHOUT ERROR 选项,为了处理来自 INSERT、DELETE、MERGE 和 UPDATE 语句的引用完整性违反。
当约束或唯一索引处于 FILTERING WITH ERROR 模式时,在 INSERT、DELETE、MERGE 或 UPDATE 语句导致一个或多个行不符合唯一索引或约束之后,数据库服务器返回引用完整性违反错误消息。
在缺省情况下,不带有错误选项的 FILTERING 关键字指定 FILTERING WITHOUT ERROR 对象模式。
当约束或唯一索引处于 FILTERING WITHOUT ERROR 模式时,INSERT、DELETE、MERGE 或 UPDATE 语句成功,但数据库服务器通过将任何失败的行写到与目标表相关联的违反表,来强制该索引或唯一索引要求。将关于约束违反或唯一索引违反的诊断信息写到与目标表相关联的诊断表。
如果 INSERT 语句不是单 INSERT,则以下一记录继续剩余的插入操作。
在所有这些情况下,数据库服务器将关于每一约束违反或唯一索引违反的诊断信息发送到与目标表相关联的诊断表。
要获取关于数据库服务器写到违反表和诊断表的记录的结构信息,请参阅 违反表的结构 和 诊断表的结构。
在 SET Database Object Mode 语句正在将外键约束的模式更改为 FILTERING WITHOUT ERROR 或 FILTERING WITH ERROR 时,数据库服务器通过检测受约束的表中的每一行验证该约束,来确保带有相应的值的行在被引用的表的主键列中存在。此验证可需要大量时间和资源。在 SET Database Object 模式操作期间您可替代地绕过对违反行的搜索,通过包括 NOVALIDATE 关键字来将外键约束模式更改为 FILTERING WITHOUT ERROR NOVALIDATE 或 FILTERING WITH ERROR NOVALIDATE。对于大型表,指定 ENABLED NOVALIDATE 可显著地减少将外键约束的模式更改为过滤模式所需的时间。