Enterprise Manager *によって生成された一部のスクリプト(またはそうでないかどうかは関係ありません)は、チェック制約WITH NOCHECKを作成したようです。
これで、誰かがテーブルを変更すると、 SQL Serverは失敗したチェック制約に遭遇します 、エラーをスローします。
SQLにすべてのチェック制約を通過させてチェックさせることはできますか?
ランニング:
sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'
以前に無効にされたチェック制約のみを有効にし、実際にはチェックしません。
* SQL Server 2000
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTSは、実際には制約を信頼できるものにしません。制約に違反する行を報告します。実際にすべての制約を信頼できるようにするには、次のようにします。
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
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
その後、制約が再度有効になりますチェックあり:
--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'
注:最後のステートメントで、WITH CHECK CHECK
はタイプミスではありません。 「WITHCHECK」は、すべてのテーブルデータをチェックして違反がないことを確認し、制約を信頼できるようにします。チェックにより、制約が有効になっていることを確認します。
参照: http://sqlblog.com/blogs/tibor_karaszi/archive/2008/01/12/non-trusted-constraints.aspx
見つかりました :
制約が有効になっているかどうかに関係なく、現在のデータベース内のすべてのテーブルのすべての制約をチェックします。
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS
有効な制約のみをチェックするには:
DBCC CHECKCONSTRAINTS