16

参照する外部キー制約を持つ SQL Server 2012 データベースがありますCountries.CountryID = States.CountryID

テーブルを再作成する必要があったCountriesため、この FOREIGN KEY をStatesテーブルから削除しました (そうしないと、国を削除できません)

それを行った後、FKを再作成したいのですが、次のStatesように指定しない限り、できませんNO CHECK

ALTER TABLE States 
    WITH NOCHECK
    ADD CONSTRAINT FK_StatesCountries FOREIGN KEY (CountryID) REFERENCES Countries(CountryID) 
GO

最初は、States の行の一部にCountryID一致するCountries.CountryIDレコードがないことに気づきませんでした。明らかにWITH NOCHECK、エラーなしで続行できました。

現在、SQLServer はこの FK を「信頼されていない」とマークしており、MSDN はすべての制約をチェックしてクエリ オプティマイザーを再度有効にするように指示しています。では、一部の州に無効な CountryID があるにもかかわらず、次の行でエラーが発生しないのはなぜですか?

 ALTER TABLE States
      CHECK CONSTRAINT ALL
 GO

これはエラーを発生させるべきだったと思います。

4

1 に答える 1

17

制約を再び信頼できるようにするには、この構文を使用する必要がありますが、これは確かに少し奇妙に見えます。これWITH CHECKにより、既存のデータが検証されます。

 ALTER TABLE States
      WITH CHECK CHECK CONSTRAINT ALL
 GO

以前と同様に、CountryID の値が正しくない状態を解決するまで、これはエラーをスローします。

于 2012-08-31T19:43:53.003 に答える