Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách vô hiệu hóa tất cả các ràng buộc về CHECK &khóa ngoại cho một bảng trong SQL Server (Ví dụ T-SQL)

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để kiểm tra xem IDENTITY_INSERT được đặt thành BẬT hay TẮT trong SQL Server?

  2. Truy vấn máy chủ SQL để lấy danh sách các cột trong bảng cùng với các ràng buộc Kiểu dữ liệu, KHÔNG ĐẦY ĐỦ và CHÍNH CHÍNH

  3. Tối ưu hóa truy vấn SQL:Các phương pháp hay nhất để cải thiện hiệu suất

  4. Làm cách nào để lấy ngày ở định dạng YYYY-MM-DD từ trường ngày giờ TSQL?

  5. Tạo bảng trong SQL Server (T-SQL)