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

Daftar Semua Kunci Asing pada Tabel di SQL Server

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 | 7

Ini 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 dari OBJECTPROPERTY() berfungsi untuk mengembalikan 1 jika tabel memiliki 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. Tidak dapat menyelesaikan konflik pemeriksaan antara SQL_Latin1_General_CP1_CI_AS dan Latin1_General_CI_AS dalam operasi yang sama

  2. Validasi Email TSQL (tanpa ekspresi reguler)

  3. SQL Server 2008 - Bagaimana cara mengembalikan Jenis Tabel Buatan Pengguna dari Fungsi Bernilai Tabel?

  4. T-SQL:Bulatkan ke interval 15 menit terdekat

  5. Skema basis data, peningkatan otomatis