15
我有一個SQL Server 2012的分貝引用Countries.CountryID = States.CountryID
SQL數據後沒有檢查外鍵,則重新啓用查詢優化
我需要重新Countries
表,所以我把這個外鍵從States
一個外鍵約束表(否則它不會讓我放棄國家)
後,我這樣做,我想重新上States
的FK但它不會讓我,除非我指定NO CHECK
這樣:
ALTER TABLE States
WITH NOCHECK
ADD CONSTRAINT FK_StatesCountries FOREIGN KEY (CountryID) REFERENCES Countries(CountryID)
GO
我剛開始並沒有意識到一些國家的行有CountryID
沒有匹配Countries.CountryID
記錄。很明顯,WITH NOCHECK
允許我無誤地繼續。
現在SQLServer將此FK標記爲「不可信」,MSDN表示通過檢查所有約束來重新啓用查詢優化器。那麼爲什麼即使有些國家有一個無效的國家代碼,下面這行也不會給我一個錯誤?
ALTER TABLE States
CHECK CONSTRAINT ALL
GO
我認爲這應該會引發錯誤。
完美,謝謝!將在9分鐘內標記答案 – parliament