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

Kembalikan Semua Kunci Asing &PERIKSA Batasan dalam Database SQL Server (Contoh T-SQL)

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

Anda 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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara membuat daftar semua tabel di semua database di SQL Server dalam satu set hasil?

  2. SQL Server:Ekstrak Tabel Meta-Data (deskripsi, bidang dan tipe datanya)

  3. Metode Gratis untuk Memperbaiki Korupsi Indeks SQL Server

  4. Apakah ada perbedaan antara IS NULL dan =NULL

  5. Mengonfigurasi Grup Ketersediaan AlwaysOn di SQL Server