Tôi có một SQL Server 2012 db với một ràng buộc khoá ngoại tham chiếu Countries.CountryID = States.CountryID
SQL KHÔNG KIỂM TRA KEY NƯỚC NGOÀI sau khi số liệu, tái tạo điều kiện truy vấn tối ưu hóa
tôi cần để tái tạo Countries
bảng để tôi thả KEY NƯỚC NGOÀI này từ States
bảng (nếu không nó sẽ không cho phép tôi để thả nước)
Sau khi tôi làm điều đó, tôi muốn tái tạo FK trên States
nhưng nó không cho phép tôi trừ khi tôi chỉ định NO CHECK
như vậy:
ALTER TABLE States
WITH NOCHECK
ADD CONSTRAINT FK_StatesCountries FOREIGN KEY (CountryID) REFERENCES Countries(CountryID)
GO
Tôi đã không nhận ra lúc đầu rằng một số hàng của các quốc gia có CountryID
không có bản ghi phù hợp với Countries.CountryID
. Rõ ràng là WITH NOCHECK
cho phép tôi tiếp tục mà không có lỗi.
Bây giờ SQLServer có đánh dấu FK này là "không đáng tin cậy", MSDN nói để kích hoạt lại trình tối ưu hóa truy vấn bằng cách kiểm tra tất cả các ràng buộc. Vậy tại sao dòng sau không cho tôi một lỗi mặc dù một số quốc gia có một CountryID không hợp lệ?
ALTER TABLE States
CHECK CONSTRAINT ALL
GO
Tôi nghĩ điều này đáng ra phải có lỗi.
Hoàn hảo, cảm ơn! sẽ đánh dấu câu trả lời sau 9 phút – parliament