Untuk mengembalikan daftar semua batasan kunci asing yang tidak tepercaya dalam database SQL Server, Anda dapat menjalankan kode T-SQL di bawah ini.
Kunci asing yang tidak dipercaya adalah kunci yang memiliki is_not_trusted
bendera disetel ke 1
.
Contoh 1 – Hanya Kembalikan Batasan Kunci Asing yang Tidak Tepercaya
Kueri ini hanya mengembalikan batasan kunci asing yang tidak tepercaya dalam database saat ini. Untuk contoh ini, saya hanya mengembalikan nama kendala, status tepercaya, beserta status diaktifkan/dinonaktifkannya.
SELECT name AS 'Constraint', is_not_trusted, is_disabled FROM sys.foreign_keys WHERE is_not_trusted = 1;
Hasil:
+------------------------+------------------+---------------+ | Constraint | is_not_trusted | is_disabled | |------------------------+------------------+---------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 0 | +------------------------+------------------+---------------+
Ini menanyakan sys.foreign_keys
tampilan sistem. Kami tahu ini hanya mengembalikan batasan yang tidak dipercaya karena WHERE
klausa hanya menentukan baris yang memiliki is_not_trusted
kolom disetel ke 1
.
Jika Anda ingin mengembalikan hanya tepercaya batasan kunci asing, cukup ubah 1
ke 0
.
Saya juga menyertakan is_disabled
flag, karena ini menunjukkan kepada kita apakah kendala saat ini diaktifkan atau tidak. Kita dapat melihat bahwa salah satu kendala diaktifkan dan yang lainnya tidak.
Ini menunjukkan fakta bahwa batasan dapat tidak dipercaya meskipun diaktifkan. Ini karena, saat Anda mengaktifkan (atau membuat) batasan, Anda memiliki opsi untuk membuatnya memeriksa data yang ada sebelum diaktifkan. Jika Anda memilih untuk tidak memeriksa data yang ada, batasan akan tetap tidak dipercaya setelah diaktifkan.
Ini query yang sama lagi, tapi kali ini saya menyertakan tabel dan tabel referensi untuk setiap kendala:
SELECT name AS 'Constraint', OBJECT_NAME(parent_object_id) AS 'Table', OBJECT_NAME(referenced_object_id) AS 'Referenced Table', is_disabled, is_not_trusted FROM sys.foreign_keys WHERE is_not_trusted = 1;
Hasil:
+------------------------+------------+--------------------+---------------+------------------+ | Constraint | Table | Referenced Table | is_disabled | is_not_trusted | |------------------------+------------+--------------------+---------------+------------------| | FK_BandMember_Band | BandMember | Band | 1 | 1 | | FK_BandMember_Musician | BandMember | Musician | 0 | 1 | +------------------------+------------+--------------------+---------------+------------------+
Contoh 2 – Mengembalikan Semua Batasan Kunci Asing
Kueri berikut mengembalikan semua batasan kunci asing untuk database saat ini (bukan hanya yang tidak dipercaya):
SELECT name AS 'Constraint', is_not_trusted, is_disabled FROM sys.foreign_keys;
Hasil:
+--------------------------------+------------------+---------------+ | Constraint | is_not_trusted | is_disabled | |--------------------------------+------------------+---------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 0 | | FK_MembershipPeriod_BandMember | 0 | 0 | +--------------------------------+------------------+---------------+