Bạn có thể sử dụng mã bên dưới để tắt tất cả CHECK
và các ràng buộc khóa ngoại cho một bảng cụ thể trong SQL Server.
Chỉ cần thay thế TableName
với tên của bảng áp dụng.
ALTER TABLE TableName NOCHECK CONSTRAINT ALL
Dưới đây là một ví dụ mà tôi thực hiện việc này và sau đó kiểm tra kết quả.
Ví dụ 1 - Xem lại các Ràng buộc
Đầu tiên, tôi sẽ xem nhanh CHECK
hiện tại và các ràng buộc khóa ngoại trong cơ sở dữ liệu, để xem chúng có được bật hay tắt hay không.
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys UNION SELECT OBJECT_NAME(parent_object_id), name, is_disabled, is_not_trusted FROM sys.check_constraints;
Kết quả:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 0 | | ConstraintTest | chkValidEndDate | 0 | 0 | | ConstraintTest | chkTeamSize | 0 | 0 | | Occupation | chkJobTitle | 0 | 0 | +----------------+-----------------+---------------+------------------+
Vì vậy, hiện có bốn CHECK
các ràng buộc trong cơ sở dữ liệu, ba trong số đó dành cho ConstraintTest
bảng.
Chúng ta có thể thấy rằng tất cả các ràng buộc đều được bật vì is_disabled được đặt thành 0 .
Ví dụ 2 - Tắt các Ràng buộc
Bây giờ tôi sẽ tắt tất cả các ràng buộc cho ConstraintTest
bảng:
ALTER TABLE ConstraintTest NOCHECK CONSTRAINT ALL;
Ví dụ 3 - Kiểm tra kết quả
Bây giờ tôi chạy cùng một truy vấn từ ví dụ đầu tiên để xem kết quả.
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys UNION SELECT OBJECT_NAME(parent_object_id), name, is_disabled, is_not_trusted FROM sys.check_constraints;
Kết quả:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 1 | 1 | | ConstraintTest | chkValidEndDate | 1 | 1 | | ConstraintTest | chkTeamSize | 1 | 1 | | Occupation | chkJobTitle | 0 | 0 | +----------------+-----------------+---------------+------------------+
Như mong đợi, cả ba ràng buộc cho ConstraintTest bảng đã bị vô hiệu hóa (vì is_disabled cột được đặt thành 1 đối với những ràng buộc đó).
Lưu ý rằng is_not_trusted cột cũng được đặt thành 1 . Đây là một cân nhắc quan trọng, đặc biệt nếu bạn định bật lại bất kỳ ràng buộc nào đã bị vô hiệu hóa của mình.
Xem những gì bạn nên biết về VỚI NOCHECK khi bật Ràng buộc KIỂM TRA trong SQL Server để biết thông tin về cách khôi phục độ tin cậy khi kích hoạt lại các ràng buộc của bạn. Thông tin trong bài viết đó cũng áp dụng cho các khóa ngoại.
Tắt từng ràng buộc
Nếu bạn không muốn tắt tất cả các ràng buộc trong bảng, bạn có thể tắt chúng riêng lẻ. Xem Cách tắt Ràng buộc KIỂM TRA trong SQL Server và Cách tắt khóa ngoại trong SQL Server.
Bật lại các Ràng buộc
Nếu bạn cần bật lại tất cả các ràng buộc cho một bảng, hãy xem Cách bật TẤT CẢ Ràng buộc KIỂM TRA và khóa ngoại cho một bảng.
Nếu bạn cần bật lại chúng riêng lẻ, hãy xem Cách bật Ràng buộc KIỂM TRA trong SQL Server và và Cách bật khóa ngoại trong SQL Server.