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.