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

Trả lại tất cả các khóa ngoại và Ràng buộc KIỂM TRA trong Cơ sở dữ liệu SQL Server (Ví dụ T-SQL)

Trong SQL Server, bạn có thể sử dụng Transact-SQL để trả về danh sách tất cả các khóa ngoại và CHECK các ràng buộc đối với cơ sở dữ liệu hiện tại.

Các ví dụ trên trang này truy vấn hai chế độ xem hệ thống để truy xuất thông tin này: sys.foreign_keys sys.check_constraints . Bạn có thể truy vấn từng cái riêng biệt hoặc sử dụng UNION để hiển thị tất cả chúng trong một tập kết quả duy nhất.

Ví dụ 1 - Bộ Kết quả Kết hợp

Trong ví dụ này, tôi sử dụng UNION để trả lại khóa ngoại và CHECK các ràng buộc trong cùng một tập kết quả.

 SELECT OBJECT_NAME (parent_object_id) AS 'Table', tên AS 'Constraint', type_desc, is_disabled, is_not_trustedFROM sys.foreign_keysUNIONSELECT OBJECT_NAME (parent_object_id), tên, type_desc, is_disabled, is_not_trustedFROM systraints.check; 
 Kết quả:

 + ------------------ + --------------------------- ----- + ------------------------ + --------------- + --- --------------- + | Bảng | Ràng buộc | type_desc | is_disabled | is_not_trusted || ------------------ + ---------------------------- ---- + ------------------------ + --------------- + ---- -------------- || BandMember | FK_BandMember_Band | FOREIGN_KEY_CONSTRAINT | 0 | 0 || BandMember | FK_BandMember_Musician | FOREIGN_KEY_CONSTRAINT | 0 | 0 || Thành phố | FK_City_Country | FOREIGN_KEY_CONSTRAINT | 0 | 0 || Thành viênPeriod | chkValidEndDate | CHECK_CONSTRAINT | 0 | 0 || Thành viênPeriod | FK_MembershipPeriod_BandMember | FOREIGN_KEY_CONSTRAINT | 0 | 0 | + ------------------ + ---------------------------- ---- + ------------------------ + --------------- + ---- -------------- + 

Trong trường hợp này, cơ sở dữ liệu hiện tại chứa bốn khóa ngoại và một CHECK hạn chế.

Chúng tôi cũng có thể xem liệu từng ràng buộc được bật hay tắt, cũng như liệu nó có đáng tin cậy hay không.

Ví dụ 2 - Trả lại Tất cả các Cột

Hai chế độ xem này trả về nhiều cột hơn tôi đã liệt kê trong ví dụ này. Bạn luôn có thể sử dụng ký tự đại diện để trả về tất cả các cột. Tuy nhiên, nếu bạn làm điều này, bạn sẽ không thể sử dụng UNION , bởi vì mỗi dạng xem trả về một số cột khác nhau.

Do đó, bạn sẽ cần phải truy vấn chúng một cách riêng biệt. Ví dụ:

 CHỌN * TỪ sys.foreign_keys; CHỌN * TỪ sys.check_constraints; 

Điều đó sẽ tạo ra hai bộ kết quả:một bộ chứa khóa ngoại, bộ kia chứa CHECK ràng buộc.

Để tiết kiệm dung lượng, tôi sẽ không hiển thị kết quả của truy vấn đó. Nhưng đây là những gì dòng thứ hai tạo ra (sử dụng đầu ra theo chiều dọc để giúp bạn không phải cuộn theo chiều ngang):

 CHỌN * TỪ sys.check_constraints; 

Kết quả (sử dụng đầu ra dọc):

 - [GHI 1] ------------------------- tên | chkValidEndDateobject_id | 1525580473principal_id | NULLschema_id | 1parent_object_id | 1349579846 loại | C type_desc | CHECK_CONSTRAINTcreate_date | 2019-09-11 00:33:02.587modify_date | 2019-09-11 00:33:02.587is_ms_shipped | 0is_published | 0is_schema_published | 0is_disabled | 0is_not_for_replication | 0is_not_trusted | 0parent_column_id | 0 định nghĩa | ([EndDate]> =[StartDate]) using_database_collation | 1is_system_name | 0 

Bạn có thể bao gồm bất kỳ cột nào trong số các cột này trong truy vấn của mình, nhưng nếu bạn kết hợp nó với các khóa ngoại, hãy đảm bảo bao gồm các cột giống nhau trên cả hai chế độ xem.

sys.foreign_keys chế độ xem trả về một vài cột nữa. Đây là một truy vấn đã sửa đổi, trong đó tôi trả về hàng đầu tiên (theo tên) từ chế độ xem đó.

 CHỌN ĐẦU (1) * TỪ sys.foreign_keysORDER THEO tên; 

Kết quả (sử dụng đầu ra dọc):

 - [GHI 1] ------------------------- tên | FK_BandMember_Bandobject_id | 1317579732principal_id | NULLschema_id | 1parent_object_id | 1285579618 kiểu | F type_desc | FOREIGN_KEY_CONSTRAINTcreate_date | 2019-08-17 15:58:42.027modify_date | 2019-08-17 15:58:42.027is_ms_shipped | 0is_published | 0is_schema_published | 0referenced_object_id | 1253579504key_index_id | 1is_disabled | 0is_not_for_replication | 0is_not_trusted | 0delete_referential_action | 0delete_referential_action_desc | NO_ACTIONngày_thực_hiện_giá_trình | 0update_referential_action_desc | NO_ACTIONis_system_name | 0 

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận hàng cập nhật

  2. INFORMATION_SCHEMA so với sysobjects

  3. Cách dễ dàng chọn cột bên phải làm Khóa chính cho một bảng nhất định

  4. Trả về tất cả các khóa ngoại tham chiếu đến một bảng đã cho trong SQL Server

  5. chọn * từ bảng so với chọn colA, colB, v.v. từ hành vi thú vị của bảng trong SQL Server 2005