Di SQL Server, Anda dapat menggunakan Transact-SQL untuk mengembalikan daftar semua kunci asing dan CHECK
batasan untuk database saat ini.
Contoh pada halaman ini menanyakan dua tampilan sistem untuk mengambil informasi ini:
sys.foreign_keys
dan
sys.check_constraints
. Anda dapat menanyakan masing-masing secara terpisah, atau menggunakan UNION
untuk menampilkan semuanya dalam satu kumpulan hasil.
Contoh 1 – Kumpulan Hasil Gabungan
Dalam contoh ini, saya menggunakan UNION
untuk mengembalikan kunci asing dan CHECK
batasan dalam kumpulan hasil yang sama.
SELECT OBJECT_NAME(parent_object_id) AS 'Table', nama AS 'Constraint', type_desc, is_disabled, is_not_trustedFROM sys.foreign_keysUNIONSELECT OBJECT_NAME(parent_object_id), nama, type_desc, is_disabled, is_disabled, Hasil:+------------------+--------------------------- -----+------------------------+---------------+--- ---------------+| Tabel | Batasan | type_desc | is_disable | is_not_trusted ||------------------+--------------------------------------- ----+------------------------+---------------+---- --------------|| Anggota Band | FK_BandMember_Band | FOREIGN_KEY_CONSTRAINT | 0 | 0 || Anggota Band | FK_BandMember_Musisi | FOREIGN_KEY_CONSTRAINT | 0 | 0 || Kota | FK_Kota_Negara | FOREIGN_KEY_CONSTRAINT | 0 | 0 || Periode Keanggotaan | chkValidEndDate | CHECK_CONSTRAINT | 0 | 0 || Periode Keanggotaan | FK_MembershipPeriod_BandMember | FOREIGN_KEY_CONSTRAINT | 0 | 0 |+------------------+---------------------------- ----+------------------------+---------------+---- --------------+Dalam hal ini, database saat ini berisi empat kunci asing dan satu
CHECK
paksaan.Kami juga dapat melihat apakah setiap batasan diaktifkan atau dinonaktifkan, serta apakah itu tepercaya atau tidak.
Contoh 2 – Kembalikan Semua Kolom
Kedua tampilan ini mengembalikan lebih banyak kolom daripada yang saya cantumkan dalam contoh ini. Anda selalu dapat menggunakan wildcard untuk mengembalikan semua kolom. Namun, jika Anda melakukan ini, Anda tidak akan dapat menggunakan
UNION
, karena setiap tampilan mengembalikan jumlah kolom yang berbeda.Oleh karena itu, Anda harus menanyakannya secara terpisah. Misalnya:
SELECT * FROM sys.foreign_keys;SELECT * FROM sys.check_constraints;Itu akan menghasilkan dua set hasil:satu berisi kunci asing, yang lain berisi
CHECK
kendala.Untuk menghemat ruang, saya tidak akan menampilkan hasil kueri itu. Tapi inilah yang dihasilkan baris kedua (menggunakan output vertikal untuk menyelamatkan Anda dari keharusan menggulir secara horizontal):
SELECT * FROM sys.check_constraints;Hasil (menggunakan keluaran vertikal):
-[ REKAM 1 ]-------------------------nama | chkValidEndDateobject_id | 1525580473principal_id | NULLschema_id | 1parent_object_id | 1349579846tipe | C type_desc | CHECK_CONSTRAINTbuat_tanggal | 11-09-2019 00:33:02.587modify_date | 11-09-2019 00:33:02.587is_ms_shipped | 0is_diterbitkan | 0is_schema_published | 0is_dinonaktifkan | 0is_not_for_replication | 0is_not_trusted | 0parent_column_id | 0definisi | ([Tanggal Akhir]>=[Tanggal Mulai])uses_database_collation | 1is_sistem_bernama | 0Anda dapat menyertakan salah satu kolom ini dalam kueri Anda, tetapi jika Anda menggabungkannya dengan kunci asing, pastikan untuk menyertakan kolom yang sama di kedua tampilan.
sys.foreign_keys
view mengembalikan beberapa kolom lagi. Inilah kueri yang dimodifikasi, tempat saya mengembalikan baris pertama (berdasarkan nama) dari tampilan itu.SELECT TOP(1) * FROM sys.foreign_keysORDER BY name;Hasil (menggunakan keluaran vertikal):
-[ REKAM 1 ]-------------------------nama | FK_BandMember_Bandobject_id | 1317579732principal_id | NULLschema_id | 1parent_object_id | 1285579618tipe | F type_desc | FOREIGN_KEY_CONSTRAINTbuat_tanggal | 2019-08-17 15:58:42.027modify_date | 17-08-2019 15:58:42.027is_ms_shipped | 0is_diterbitkan | 0is_schema_published | 0referenced_object_id | 1253579504key_index_id | 1is_dinonaktifkan | 0is_not_for_replication | 0is_not_trusted | 0delete_referential_action | 0delete_referential_action_desc | NO_ACTIONupdate_referential_action | 0update_referential_action_desc | NO_ACTIONadalah_nama_sistem | 0