Di bawah ini adalah dua metode yang dapat Anda gunakan untuk mengembalikan daftar kunci asing untuk tabel tertentu di SQL Server.
Ini mirip dengan mengembalikan kunci asing berdasarkan tabel referensi/kunci utama, kecuali di sini, saya mengembalikan kunci asing berdasarkan tabel referensi/kunci asing itu sendiri.
Opsi 1 – sys.foreign_keys
Kode berikut mengambil semua batasan kunci asing pada tabel yang diberikan, bersama dengan tabel yang direferensikan.
GUNAKAN WideWorldImportersDW;SELECT OBJECT_NAME(parent_object_id) AS [FK Table], nama AS [Foreign Key], OBJECT_NAME(referenced_object_id) AS [PK Table]FROM sys.foreign_keysWHERE parent_object_id =OBJECT_Order'';Hasil:
+------------+--------------------------------- ------------------+------------+| Tabel FK | Kunci Asing | Tabel PK ||-------------+--------------------------------- ------------------+------------|| Pesan | FK_Fact_Order_City_Key_Dimension_City | Kota || Pesan | FK_Fact_Order_Customer_Key_Dimension_Customer | Pelanggan || Pesan | FK_Fact_Order_Stock_Item_Key_Dimension_Stock Item | Barang Stok || Pesan | FK_Fact_Order_Order_Date_Key_Dimension_Date | Tanggal || Pesan | FK_Fact_Order_Picked_Date_Key_Dimension_Date | Tanggal || Pesan | FK_Fact_Order_Salesperson_Key_Dimension_Employee | Karyawan || Pesan | FK_Fact_Order_Picker_Key_Dimension_Employee | Karyawan |+------------+---------------------------------- -----------------+------------+Dalam hal ini saya menggunakan WideWorldImportersDW database, dan saya mengembalikan kunci asing untuk
Fact.Order
tabel.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 berdasarkan tabel kunci asing, sehingga kami dapat melakukan ini:
EXEC sp_fkeys @fktable_name ='Pesanan', @fktable_owner ='Fakta';Hasil (menggunakan keluaran vertikal):
-[ REKAM 1 ]-------------------------PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | DimensiPKTABLE_NAME | KotaPKCOLUMN_NAME | Kunci KotaFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktaFKTABLE_NAME | PesanFKCOLUMN_NAME | Kunci KotaKEY_SEQ | 1UPDATE_ATURAN | 1HAPUS_ATURAN | 1FK_NAME | FK_Fact_Order_City_Key_Dimension_CityPK_NAME | PK_Dimension_CityDEFERRABILITY | 7-[ REKAM 2 ]------------------------- PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | DimensiPKTABLE_NAME | PelangganPKCOLUMN_NAME | Kunci PelangganFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktaFKTABLE_NAME | PesanFKCOLUMN_NAME | Kunci PelangganKEY_SEQ | 1UPDATE_ATURAN | 1HAPUS_ATURAN | 1FK_NAME | FK_Fact_Order_Customer_Key_Dimension_CustomerPK_NAME | PK_Dimension_CustomerDEFERRABILITY | 7-[ REKAM 3 ]------------------------- PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | DimensiPKTABLE_NAME | TanggalPKCOLUMN_NAME | TanggalFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktaFKTABLE_NAME | PesanFKCOLUMN_NAME | Tanggal Pemesanan KeyKEY_SEQ | 1UPDATE_ATURAN | 1HAPUS_ATURAN | 1FK_NAME | FK_Fact_Order_Order_Date_Key_Dimension_DatePK_NAME | PK_Dimension_DateDEFERRABILITY | 7-[ REKAM 4 ]------------------------- PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | DimensiPKTABLE_NAME | TanggalPKCOLUMN_NAME | TanggalFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktaFKTABLE_NAME | PesanFKCOLUMN_NAME | Tanggal yang Dipilih KeyKEY_SEQ | 1UPDATE_ATURAN | 1HAPUS_ATURAN | 1FK_NAME | FK_Fact_Order_Picked_Date_Key_Dimension_DatePK_NAME | PK_Dimension_DateDEFERRABILITY | 7-[ REKAM 5 ]------------------------- PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | DimensiPKTABLE_NAME | KaryawanPKCOLUMN_NAME | Kunci KaryawanFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktaFKTABLE_NAME | PesanFKCOLUMN_NAME | Kunci Tenaga PenjualKEY_SEQ | 1UPDATE_ATURAN | 1HAPUS_ATURAN | 1FK_NAME | FK_Fact_Order_Salesperson_Key_Dimension_EmployeePK_NAME | PK_Dimension_EmployeeDEFERRABILITY | 7-[ REKAM 6 ]------------------------- PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | DimensiPKTABLE_NAME | KaryawanPKCOLUMN_NAME | Kunci KaryawanFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktaFKTABLE_NAME | PesanFKCOLUMN_NAME | Kunci PemilihKEY_SEQ | 1UPDATE_ATURAN | 1HAPUS_ATURAN | 1FK_NAME | FK_Fact_Order_Picker_Key_Dimension_EmployeePK_NAME | PK_Dimension_EmployeeDEFERRABILITY | 7-[ REKAM 7 ]------------------------- PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | DimensiPKTABLE_NAME | Stok BarangPKCOLUMN_NAME | Kunci Item StokFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktaFKTABLE_NAME | PesanFKCOLUMN_NAME | Stok Item KeyKEY_SEQ | 1UPDATE_ATURAN | 1HAPUS_ATURAN | 1FK_NAME | FK_Fact_Order_Stock_Item_Key_Dimension_Stock ItemPK_NAME | PK_Dimension_Stock_ItemDEFERRABILITY | 7Ini dapat dengan mudah dialihkan untuk mencari kunci asing berdasarkan tabel kunci utama hanya dengan mengganti parameter dengan
@pktable_name
dan@pktable_owner
:EXEC sp_fkeys @pktable_name ='Kota', @pktable_owner ='Dimensi';Cek Benar/Salah
Jika Anda hanya ingin tahu apakah tabel memiliki kunci asing atau tidak, tetapi Anda tidak ingin semuanya dicantumkan, lihat Memeriksa Apakah Tabel Memiliki Kunci Asing di SQL Server dengan OBJECTPROPERTY().
Artikel tersebut menggunakan
TableHasForeignKey
argumen dariOBJECTPROPERTY()
berfungsi untuk mengembalikan1
jika tabel memiliki kunci asing, dan0
jika tidak.