您可为约束或为唯一索引指定启用的或禁用的模式。对于 START VIOLATIONS TABLE 语句已将违反表与诊断表相关联的表,您还可使用 FILTERING 关键字来为处理不遵守约束或不遵守唯一索引要求的那些行指定 ERROR 模式。
当您将外键约束的模式更改为 ENABLED 或 FILTERING 时,您可可选地包括 NOVALIDATE 关键字。这会挂起对那些在 SET CONSTRAINTS 语句执行期间违反该约束的行的引用完整性检查。
如果您在创建约束的 ALTER TABLE 或 CREATE TABLE 语句中未指定模式,则缺省地启用该约束。
类似地,如果您在创建索引的 CREATE INDEX 语句中未指定模式,则缺省地启用该索引。
然而,对于在 SET Database Object Mode 语句中的数据库对象没有缺省的模式。如果您在 SET Database Object Mode 语句的 SET CONSTRAINTS 或 SET INDEXES 选项中未指定模式,则该语句失败并报错 -201,且不更改该约束模式或索引模式。
SET CONSTRAINTS u100_1 DISABLED;
SET INDEXES u100_1 DISABLED;
SET CONSTRAINTS u100_2 ENABLED NOVALIDATE;
SET CONSTRAINTS u100_2 ENABLE;
当您使用 FILTERING WITHOUT ERROR 关键字来定义过滤模式时,后续的那个约束的违反或那个索引的唯一性违反不会导致 INSERT、DELETE、MERGE 或 UPDATE 操作失败,如果有些行违反该约束或该唯一索引的话。在此过滤模式中,DML 语句成功,但数据库服务器通过将不符合的行写到违反表来强制满足该约束或该唯一索引的要求。
SET CONSTRAINTS r104_11 FILTERING WITHOUT ERROR;要获取关于过滤模式的更多信息,请参阅主题 过滤模式。
SET CONSTRAINTS FOR orders DISABLED;那个表上的后续的 DML 操作不理会违反 orders 表上的约束的那些行,不在它的违反表或诊断表中创建条目,如果这些表存在的话。然而,如果在 orders 表上存在任何唯一索引,则根据索引的当前模式处理违反唯一性要求的那些行,如罗列在 sysobjstate 系统目录表中的那样。