Bagaimana saya bisa menemukan semua dependensi kunci asing pada kolom tertentu?
Apa saja alternatif yang berbeda (secara grafis dalam SSMS, kueri / tampilan dalam SQL Server, alat basis data pihak ke-3, kode dalam .NET)?
.net
sql-server
foreign-keys
Bahkan Mien
sumber
sumber
mencoba:
sp_help [table_name]
Anda akan mendapatkan semua informasi tentang tabel, termasuk semua kunci asing
sumber
sp_fkeys [table]
sp_fkeys @fktable_name='TableName'
Jika Anda berencana menghapus atau mengganti nama tabel atau kolom hanya menemukan dependensi kunci asing mungkin tidak cukup.
Tabel referensi tidak terhubung dengan kunci asing - Anda juga harus mencari tabel referensi yang mungkin tidak terhubung dengan kunci asing (Saya telah melihat banyak database dengan desain buruk yang tidak memiliki kunci asing yang ditentukan tetapi yang memiliki data terkait ). Solusi mungkin dengan mencari nama kolom di semua tabel dan mencari kolom serupa.
Objek basis data lainnya - ini mungkin agak off topic tetapi jika Anda mencari semua referensi selain itu juga penting untuk memeriksa objek dependen.
Alat GUI - Cobalah opsi "Cari objek terkait" SSMS atau alat seperti Pencarian ApexSQL (alat gratis, diintegrasikan ke dalam SSMS) untuk mengidentifikasi semua objek bergantung termasuk tabel yang terhubung dengan kunci asing.
sumber
Karena pertanyaan Anda diarahkan pada satu tabel, Anda dapat menggunakan ini:
Saya menemukannya di SO di sini:
https://stackoverflow.com/a/12956348/652519
Saya menemukan informasi yang saya butuhkan dengan cepat. Ini mencantumkan tabel, kolom, dan nama kunci asing.
EDIT
Berikut tautan ke dokumentasi yang merinci berbagai parameter yang dapat digunakan: https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-fkeys-transact-sql
sumber
Saya pikir skrip ini lebih murah:
sumber
Salah satu yang sangat saya suka gunakan disebut SQL Dependency Tracker oleh Red Gate Software . Anda bisa memasukkan objek database apa saja seperti tabel, prosedur tersimpan, dll. Dan kemudian akan secara otomatis menarik garis hubungan antara semua objek lain yang bergantung pada item yang Anda pilih.
Memberikan representasi grafis yang sangat baik dari dependensi dalam skema Anda.
sumber
Terima kasih banyak kepada John Sansom, pertanyaannya luar biasa!
Selain itu: Anda harus menambahkan "DAN PT.ORDINAL_POSITION = CU.ORDINAL_POSITION" di akhir permintaan Anda.
Jika Anda memiliki beberapa bidang di kunci utama, pernyataan ini akan cocok dengan bidang yang sesuai satu sama lain (saya punya kasus, permintaan Anda membuat semua kombinasi, jadi untuk 2 bidang di kunci utama, saya punya 4 hasil untuk kunci asing yang sesuai) .
(Maaf saya tidak bisa mengomentari jawaban John karena saya tidak memiliki poin reputasi yang cukup).
sumber
Kueri ini akan mengembalikan detail tentang kunci asing dalam sebuah tabel, mendukung beberapa kunci kolom.
sumber
Setelah pencarian panjang saya menemukan solusi yang berfungsi. Basis data saya tidak menggunakan sys.foreign_key_columns dan information_schema.key_column_usage hanya berisi kunci primer.
Saya menggunakan SQL Server 2015
SOLUSI 1 (jarang digunakan)
Jika solusi lain tidak berhasil, ini akan berfungsi dengan baik:
SOLUSI 2 (umum digunakan)
Dalam sebagian besar kasus ini akan berfungsi dengan baik:
sumber
Anda dapat Menggunakan INFORMATION_SCHEMA.KEY_COLUMN_USAGE dan sys.foreign_key_columns untuk mendapatkan metadata kunci asing untuk tabel yaitu nama Kendala, tabel Referensi dan kolom Referensi dll.
Di bawah ini adalah kueri:
sumber
Hanya sebuah catatan untuk jawaban "John Sansom",
Jika dependensi kunci asing dicari, saya pikir bahwa klausa PT Where harus:
dan kondisi ON -nya :
Seperti biasa digunakan kunci utama dari tabel asing, saya pikir masalah ini belum diperhatikan sebelumnya.
sumber
Ini akan memberi Anda:
Skema FK itu sendiri milik FK
sumber
GUNAKAN information_schema;
sumber