Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kembalikan Semua Kunci Asing yang Mereferensikan Tabel yang Diberikan di SQL Server

Jika Anda perlu mengembalikan semua kunci asing yang mereferensikan tabel tertentu di SQL Server, coba salah satu metode berikut.

Metode pertama menanyakan sys.foreign_keys tampilan sistem. Metode kedua mengeksekusi sp_fkeys prosedur tersimpan sistem.

Opsi 1 – sys.foreign_keys

Kode berikut mengambil semua kunci asing yang mereferensikan tabel yang diberikan, bersama dengan kunci utama dan tabel kunci asing. Saya juga menyertakan skema untuk tabel kunci asing.

USE WideWorldImportersDW;
SELECT 
  OBJECT_NAME(referenced_object_id) AS [PK Table],
  name AS [Foreign Key],
  SCHEMA_NAME(schema_id) AS [FK Schema],
  OBJECT_NAME(parent_object_id) AS [FK Table]
FROM sys.foreign_keys
WHERE referenced_object_id = OBJECT_ID('Dimension.City');

Hasil:

+------------+---------------------------------------+-------------+------------+
| PK Table   | Foreign Key                           | FK Schema   | FK Table   |
|------------+---------------------------------------+-------------+------------|
| City       | FK_Fact_Order_City_Key_Dimension_City | Fact        | Order      |
| City       | FK_Fact_Sale_City_Key_Dimension_City  | Fact        | Sale       |
+------------+---------------------------------------+-------------+------------+

Dalam hal ini saya menggunakan WideWorldImportersDW database, dan saya mengembalikan kunci asing yang mereferensikan Dimension.City tabel (Dimension.City tabel berisi kolom kunci utama yang dirujuk oleh kunci asing).

Opsi 2 – sp_fkeys

Cara lain untuk mendapatkan kunci asing yang mereferensikan tabel tertentu adalah dengan menggunakan sp_fkeys prosedur tersimpan sistem. Prosedur tersimpan ini memberi kita pilihan untuk mendapatkan kunci asing berdasarkan (antara lain) tabel yang direferensikan, atau tabel referensi.

Dalam hal ini kami tertarik untuk mendapatkan kunci asing yang mereferensikan tabel yang diberikan, sehingga kami dapat melakukan ini:

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

Hasil (menggunakan keluaran vertikal):

-[ RECORD 1 ]-------------------------
PKTABLE_QUALIFIER | WideWorldImportersDW
PKTABLE_OWNER     | Dimension
PKTABLE_NAME      | City
PKCOLUMN_NAME     | City Key
FKTABLE_QUALIFIER | WideWorldImportersDW
FKTABLE_OWNER     | Fact
FKTABLE_NAME      | Order
FKCOLUMN_NAME     | City Key
KEY_SEQ           | 1
UPDATE_RULE       | 1
DELETE_RULE       | 1
FK_NAME           | FK_Fact_Order_City_Key_Dimension_City
PK_NAME           | PK_Dimension_City
DEFERRABILITY     | 7
-[ RECORD 2 ]-------------------------
PKTABLE_QUALIFIER | WideWorldImportersDW
PKTABLE_OWNER     | Dimension
PKTABLE_NAME      | City
PKCOLUMN_NAME     | City Key
FKTABLE_QUALIFIER | WideWorldImportersDW
FKTABLE_OWNER     | Fact
FKTABLE_NAME      | Sale
FKCOLUMN_NAME     | City Key
KEY_SEQ           | 1
UPDATE_RULE       | 1
DELETE_RULE       | 1
FK_NAME           | FK_Fact_Sale_City_Key_Dimension_City
PK_NAME           | PK_Dimension_City
DEFERRABILITY     | 7

Ini dapat dengan mudah dialihkan untuk mencari kunci asing berdasarkan tabel kunci asing hanya dengan mengganti parameter dengan @fktable_name dan @fktable_owner :

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

Cek Benar/Salah

Jika Anda hanya ingin tahu apakah tabel direferensikan oleh kunci asing atau tidak, tetapi Anda tidak ingin semuanya dicantumkan, lihat Memeriksa apakah Tabel Direferensikan oleh Kunci Asing di SQL Server dengan OBJECTPROPERTY().

Artikel tersebut menggunakan TableHasForeignRef argumen dari OBJECTPROPERTY() berfungsi untuk mengembalikan 1 jika tabel direferensikan oleh kunci asing, dan 0 jika tidak.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server Ubah Model Pemulihan

  2. Ekspresi Tabel Umum, mengapa titik koma?

  3. Pemecahan Masalah Hibah Memori Variabel di SQL Server

  4. Batasan hanya untuk satu catatan yang ditandai sebagai default

  5. Jatuhkan semua tabel yang namanya dimulai dengan string tertentu