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

Liệt kê tất cả các khóa ngoại trên một bảng trong SQL Server

Dưới đây là hai phương pháp bạn có thể sử dụng để trả về danh sách các khóa ngoại cho một bảng nhất định trong SQL Server.

Điều này tương tự với việc trả về khóa ngoại dựa trên bảng tham chiếu / khóa chính, ngoại trừ ở đây, tôi trả về khóa ngoại dựa trên chính bảng tham chiếu / khóa ngoại.

Tùy chọn 1 - sys.foreign_keys

Đoạn mã sau truy xuất tất cả các ràng buộc khóa ngoại trên bảng đã cho, cùng với các bảng được tham chiếu.

 SỬ DỤNG WideWorldImportersDW; CHỌN OBJECT_NAME (parent_object_id) AS [Bảng FK], tên AS [Khoá ngoại], OBJECT_NAME (reference_object_id) AS [Bảng PK] FROM sys.foreign_keysWHERE parent_object_id =OBJECT_ID ('Fact.Order');  

Kết quả:

 + ------------ + --------------------------------- ------------------ + ------------ + | Bảng FK | Khóa ngoại | Bảng PK || ------------ + --------------------------------- ------------------ + ------------ || Đặt hàng | FK_Fact_Order_City_Key_Dimension_City | Thành phố || Đặt hàng | FK_Fact_Order_Customer_Key_Dimension_Customer | Khách hàng || Đặt hàng | FK_Fact_Order_Stock_Item_Key_Dimension_Stock Item | Hàng tồn kho || Đặt hàng | FK_Fact_Order_Order_Date_Key_Dimension_Date | Ngày tháng || Đặt hàng | FK_Fact_Order_Picked_Date_Key_Dimension_Date | Ngày tháng || Đặt hàng | FK_Fact_Order_Salesman_Key_Dimension_E NHÂN VIÊN | Nhân viên || Đặt hàng | FK_Fact_Order_Picker_Key_Dimension_E Nhân viên | Nhân viên | + ------------ + ---------------------------------- ----------------- + ------------ + 

Trong trường hợp này, tôi đang sử dụng WideWorldImportersDW cơ sở dữ liệu và tôi đang trả lại các khóa ngoại cho Fact.Order bảng.

Tùy chọn 2 - sp_fkeys

Một cách khác để lấy các khóa ngoại tham chiếu đến một bảng cụ thể là sử dụng sp_fkeys hệ thống lưu trữ thủ tục. Thủ tục được lưu trữ này cung cấp cho chúng tôi lựa chọn nhận khóa ngoại dựa trên (trong số những thứ khác) bảng tham chiếu hoặc bảng tham chiếu.

Trong trường hợp này, chúng tôi quan tâm đến việc lấy khóa ngoại dựa trên bảng khóa ngoại, vì vậy chúng tôi có thể thực hiện điều này:

 EXEC sp_fkeys @fktable_name ='Order', @fktable_owner ='Fact'; 

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

 - [GHI 1] ------------------------- PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | Thứ nguyênPKTABLE_NAME | CityPKCOLUMN_NAME | Thành phố KeyFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FactFKTABLE_NAME | Đặt hàngFKCOLUMN_NAME | Thành phố KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_City_Key_Dimension_CityPK_NAME | PK_Dimension_CityDEFERRABILITY | 7- [GHI 2] ------------------------- PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | Thứ nguyênPKTABLE_NAME | Khách hàngPKCOLUMN_NAME | Khách hàng KeyFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FactFKTABLE_NAME | Đặt hàngFKCOLUMN_NAME | Khách hàng KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Customer_Key_Dimension_CustomerPK_NAME | PK_Dimension_CustomerDEFERRABILITY | 7- [GHI 3] ------------------------- PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | Thứ nguyênPKTABLE_NAME | NgàyPKCOLUMN_NAME | DateFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FactFKTABLE_NAME | Đặt hàngFKCOLUMN_NAME | Ngày đặt hàng KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Order_Date_Key_Dimension_DatePK_NAME | PK_Dimension_DateDEFERRABILITY | 7- [GHI 4] ------------------------- PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | Thứ nguyênPKTABLE_NAME | NgàyPKCOLUMN_NAME | DateFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FactFKTABLE_NAME | Đặt hàngFKCOLUMN_NAME | Ngày chọn KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Picked_Date_Key_Dimension_DatePK_NAME | PK_Dimension_DateDEFERRABILITY | 7- [GHI 5] ------------------------- PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | Thứ nguyênPKTABLE_NAME | Nhân viênPKCOLUMN_NAME | Nhân viên KeyFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FactFKTABLE_NAME | Đặt hàngFKCOLUMN_NAME | Nhân viên bán hàng KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Saleswoman_Key_Dimension_EmpleteeePK_NAME | PK_Dimension_E EmployeeDEFERRABILITY | 7- [GHI 6] ------------------------- PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | Thứ nguyênPKTABLE_NAME | Nhân viênPKCOLUMN_NAME | Nhân viên KeyFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FactFKTABLE_NAME | Đặt hàngFKCOLUMN_NAME | Bộ chọn KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Picker_Key_Dimension_EmpleteeePK_NAME | PK_Dimension_E EmployeeDEFERRABILITY | 7- [GHI CHÚ 7] ------------------------- PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | Thứ nguyênPKTABLE_NAME | Hàng tồn khoPKCOLUMN_NAME | Kho hàng KeyFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FactFKTABLE_NAME | Đặt hàngFKCOLUMN_NAME | Kho hàng KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Stock_Item_Key_Dimension_Stock ItemPK_NAME | PK_Dimension_Stock_ItemDEFERRABILITY | 7 

Điều này có thể dễ dàng được chuyển đổi để tìm kiếm các khóa ngoại dựa trên bảng khóa chính bằng cách chỉ cần thay thế các tham số bằng @pktable_name@pktable_owner :

 EXEC sp_fkeys @pktable_name ='City', @pktable_owner ='Dimension'; 

Kiểm tra Đúng / Sai

Nếu bạn chỉ muốn biết liệu bảng có khóa ngoại hay không, nhưng bạn không muốn liệt kê tất cả, hãy xem Kiểm tra xem bảng có khóa ngoại trong SQL Server với OBJECTPROPERTY () hay không.

Bài viết đó sử dụng TableHasForeignKey đối số của OBJECTPROPERTY() hàm trả về 1 nếu bảng có khóa ngoại và 0 nếu không.


  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ỗi tràn số học khi chuyển đổi biểu thức thành kiểu dữ liệu ngày giờ. (trong khi hiển thị ngày giờ ..)

  2. Cách chuyển đổi chữ hoa thành chữ thường trong SQL Server - LOWER ()

  3. Bộ xử lý Intel được đề xuất cho SQL Server 2014 - tháng 3 năm 2015

  4. Sự khác biệt giữa varchar và nvarchar là gì?

  5. OBJECTPROPERTY () so với OBJECTPROPERTYEX () trong SQL Server:Sự khác biệt là gì?