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

Cách trả lại tất cả các ràng buộc kiểm tra không đáng tin cậy trong SQL Server (Ví dụ T-SQL)

Nếu bạn cần trả lại danh sách tất cả CHECK không đáng tin cậy trong cơ sở dữ liệu SQL Server, bạn có thể chạy mã T-SQL bên dưới.

Bởi "không đáng tin cậy", tôi đang đề cập đến những ràng buộc có is_not_trusted của chúng cờ được đặt thành 1 .

Ví dụ 1 - Chỉ trả lại Ràng buộc về KIỂM TRA không tin cậy

Truy vấn này chỉ trả về CHECK không đáng tin cậy các ràng buộc trong cơ sở dữ liệu hiện tại.

SELECT 
  OBJECT_NAME(parent_object_id) AS 'Table',
  name AS 'Constraint',
  is_disabled,
  definition
FROM sys.check_constraints
WHERE is_not_trusted = 1;

Kết quả:

+----------------+-----------------+---------------+-------------------------------+
| Table          | Constraint      | is_disabled   | definition                    |
|----------------+-----------------+---------------+-------------------------------|
| ConstraintTest | chkPrice        | 0             | ([Price]>(0))                 |
| ConstraintTest | chkValidEndDate | 1             | ([EndDate]>=[StartDate])      |
| Occupation     | chkJobTitle     | 1             | ([JobTitle]<>'Digital Nomad') |
+----------------+-----------------+---------------+-------------------------------+

Truy vấn này trả về tên ràng buộc, tên của bảng mà nó được áp dụng và định nghĩa của ràng buộc.

Nó cũng trả về is_disabled cột. Điều này cho chúng tôi biết liệu ràng buộc hiện đang được kích hoạt hay bị vô hiệu hóa. Điều này có thể quan trọng cần biết, vì một ràng buộc có thể được bật nhưng đồng thời không đáng tin cậy.

Nó truy vấn sys.check_constraints chế độ xem hệ thống. Chúng tôi biết nó chỉ trả về các ràng buộc không đáng tin cậy vì WHERE mệnh đề chỉ xác định các hàng có is_not_trusted cột được đặt thành 1 .

Nếu bạn muốn trả lại tất cả đáng tin cậy CHECK ràng buộc, chỉ cần thay đổi 1 thành 0 .

Ví dụ 2 - Trả lại Trạng thái Tin cậy

Đây là một lần nữa, nhưng lần này tôi hoán đổi definition với is_not_trusted cột:

SELECT 
  OBJECT_NAME(parent_object_id) AS 'Table',
  name AS 'Constraint',
  is_disabled,
  is_not_trusted
FROM sys.check_constraints
WHERE is_not_trusted = 1;

Kết quả:

+----------------+-----------------+---------------+------------------+
| Table          | Constraint      | is_disabled   | is_not_trusted   |
|----------------+-----------------+---------------+------------------|
| ConstraintTest | chkPrice        | 0             | 1                |
| ConstraintTest | chkValidEndDate | 1             | 1                |
| Occupation     | chkJobTitle     | 1             | 1                |
+----------------+-----------------+---------------+------------------+

Có thể là thừa nếu bao gồm is_not_trusted , nhưng ít nhất nó cũng giúp nhắc lại thực tế rằng một ràng buộc đã bật vẫn có thể không đáng tin cậy.

Ví dụ 3 - Trả lại tất cả các ràng buộc của CHECK

Truy vấn sau trả về tất cả CHECK các ràng buộc cho cơ sở dữ liệu hiện tại (không chỉ cho những cơ sở dữ liệu không đáng tin cậy):

SELECT 
  OBJECT_NAME(parent_object_id) AS 'Table',
  name AS 'Constraint',
  is_disabled, 
  is_not_trusted
FROM sys.check_constraints;

Kết quả:

+----------------+-----------------+---------------+------------------+
| Table          | Constraint      | is_disabled   | is_not_trusted   |
|----------------+-----------------+---------------+------------------|
| ConstraintTest | chkPrice        | 0             | 1                |
| ConstraintTest | chkValidEndDate | 1             | 1                |
| ConstraintTest | chkTeamSize     | 0             | 0                |
| Occupation     | chkJobTitle     | 1             | 1                |
+----------------+-----------------+---------------+------------------+

Để có một cuộc thảo luận chi tiết (và các ví dụ) về is_not_trusted cờ, hãy xem Những điều bạn nên biết với NOCHECK khi bật Ràng buộc KIỂM TRA 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. Tạo tài khoản thư cơ sở dữ liệu trong SQL Server (T-SQL)

  2. Tổng tích lũy SQL Server theo nhóm

  3. SQL Server chuyển đổi varbinary thành chuỗi

  4. SQL Server:Rò rỉ mức cách ly trên các kết nối được gộp chung

  5. SQL Server:Có thể chèn vào hai bảng cùng một lúc không?