Ian*_*oyd 25 sql-server sql-server-2000 database-integrity check-constraints sp-msforeachtable
看起来Enterprise Manager*生成的一些脚本(或者没有,它们无关紧要)创建了检查约束WITH NOCHECK.
现在,当任何人修改表时,SQL Server都会遇到失败的检查约束,并抛出错误.
我可以让SQL通过它的所有检查约束,并检查它们吗?
运行:
sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'
Run Code Online (Sandbox Code Playgroud)
只启用以前禁用的检查约束,它实际上不会检查它们.
*SQL Server 2000
Nat*_*han 50
带有ALL_CONSTRAINTS的DBCC CHECKCONSTRAINTS 实际上不会使您的约束受信任.它将报告任何违反约束的行.要实际使所有约束受信任,您可以执行以下操作:
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS --This reports any data that violates constraints.
--This reports all constraints that are not trusted
SELECT OBJECT_NAME(parent_object_id) AS table_name, name, is_disabled
FROM sys.check_constraints
WHERE is_not_trusted = 1
UNION ALL
SELECT OBJECT_NAME(parent_object_id) AS table_name, name, is_disabled
FROM sys.foreign_keys
WHERE is_not_trusted = 1
ORDER BY table_name
Run Code Online (Sandbox Code Playgroud)
在SQL Server 2000中,您可以找到任何不受信任的约束:
--Reports all constraints that are not trusted (SQL 2000)
SELECT name, type, status,
(status & 2048) AS IsTrusted,
(status & 256) AS IsEnabled,
OBJECTPROPERTY(id,'CnstIsNotTrusted') as is_not_trusted,
OBJECTPROPERTY(id,'CnstIsDisabled') as is_disabled
FROM sysobjects
WHERE type IN ('C', 'F') --C=Constraint, F=Foreign Key
AND OBJECTPROPERTY(id,'CnstIsNotTrusted') <> 0
AND OBJECTPROPERTY(id,'CnstIsDisabled') = 0
Run Code Online (Sandbox Code Playgroud)
然后使用check重新启用约束:
--This makes all constraints trusted
-- but first anything reported by DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS must be fixed.
exec sp_msforeachtable 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all'
Run Code Online (Sandbox Code Playgroud)
注意:在最后一个声明中,这WITH CHECK CHECK
不是拼写错误."WITH CHECK"将检查所有表数据以确保没有违规,并且将使约束受信任,而检查将确保启用约束.
另见:http: //sqlblog.com/blogs/tibor_karaszi/archive/2008/01/12/non-trusted-constraints.aspx
发现它:
检查当前数据库中所有表的所有约束,无论是否启用约束:
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS
Run Code Online (Sandbox Code Playgroud)
要仅检查启用的约束:
DBCC CHECKCONSTRAINTS
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22722 次 |
最近记录: |