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

7 Cara Mengembalikan Semua Tabel dengan Kunci Asing di SQL Server

Artikel ini menawarkan tujuh cara untuk mengembalikan semua tabel yang memiliki kunci asing dalam database di SQL Server.

Setiap tabel dikembalikan hanya sekali, terlepas dari berapa banyak kunci asing yang dimilikinya. Ini berbeda dengan mengembalikan semua kunci asing, bersama dengan tabelnya. Jika Anda ingin melakukannya, lihat 11 Cara Mengembalikan Kunci Asing di SQL Server.

Semua contoh di sini meminta database yang sama, dan karena itu mengembalikan hasil yang sama.

Opsi 1 – OBJECTPROPERTY() dengan sys.tables

Opsi pertama adalah menggunakan OBJECTPROPERTY() berfungsi saat menanyakan sys.tables tampilan sistem.

Fungsi ini menerima TableHasForeignKey argumen, yang akan berupa 1 atau 0 (atau NULL ). Jika 1 , ini berarti tabel tersebut memang memiliki kunci asing. Nilai 0 berarti tidak memiliki kunci asing. Oleh karena itu, kita dapat menggunakan ini dalam WHERE klausa untuk mengembalikan hanya tabel di mana TableHasForeignKey disetel ke 1 .

SELECT SCHEMA_NAME(schema_id) AS [Schema], nama AS [Table]FROM sys.tablesWHERE OBJECTPROPERTY(object_id, 'TableHasForeignKey') =1ORDER BY [Schema], [Table];

Hasil:

+----------+--------+| Skema | Tabel ||----------+---------|| dbo | Album || dbo | Artis |+----------+--------+

Opsi 2 – OBJECTPROPERTY() dengan INFORMATION_SCHEMA.TABLES

Contoh ini menggunakan OBJECTPROPERTY() saat menanyakan INFORMATION_SCHEMA.TABLES tampilan sistem.

SELECT TABLE_SCHEMA, TABLE_NAMEFROM INFORMATION_SCHEMA.TABLESWHERE OBJECTPROPERTY(OBJECT_ID(CONCAT(TABLE_SCHEMA, '.', TABLE_NAME)),'TableHasForeignKey') =1 ANDTABLE_TYPE='BASE TABLE_SCHEMABY,
 Hasil:

+----------------+--------------+| TABLE_SCHEMA | NAMA_TABEL ||----------------+--------------|| dbo | Album || dbo | Artis |+----------------+--------------+

Opsi 3 – OBJECTPROPERTY() dengan sys.objects

Ini adalah opsi lain yang menggunakan OBJECTPROPERTY() . Kali ini saya menggunakannya ketika menanyakan sys.objects tampilan sistem.

SELECT SCHEMA_NAME(schema_id) AS [Schema], nama AS [Table]FROM sys.objects WHERE type ='U'AND OBJECTPROPERTY(OBJECT_ID(CONCAT(SCHEMA_NAME(schema_id), '.', name)), 'TableHasForeignKey ') =1ORDER BY [Skema], [Tabel]

Hasil:

+----------+--------+| Skema | Tabel ||----------+---------|| dbo | Album || dbo | Artis |+----------+--------+

Opsi 4 – INFORMATION_SCHEMA.TABLE_CONSTRAINTS dengan DISTINCT

Berikut ini contoh kueri INFORMATION_SCHEMA.TABLE_CONSTRAINTS tampilan sistem di mana jenis kendala adalah FOREIGN KEY . Dalam hal ini, saya juga menggunakan DISTINCT klausa untuk mencegah tabel dikembalikan lebih dari sekali ketika mereka memiliki lebih dari satu kunci asing.

PILIH CONSTRAINT_SCHEMA BERBEDA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTSCHEMA CONSTRAINT_TYPE ='FOREIGN KEY';

Hasil:

+---------------------+--------------+| CONSTRAINT_SCHEMA | NAMA_TABEL ||---------------------+--------------|| dbo | Album || dbo | Artis |+---------------------+--------------+

Inilah yang terjadi jika saya menghapus DISTINCT klausa:

PILIH CONSTRAINT_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTSWHERE CONSTRAINT_TYPE ='FOREIGN KEY';

Hasil:

+---------------------+--------------+| CONSTRAINT_SCHEMA | NAMA_TABEL ||---------------------+--------------|| dbo | Album || dbo | Album || dbo | Artis |+---------------------+--------------+

Dalam hal ini Albums tabel memiliki dua kunci asing, jadi saya mendapatkan dua baris untuk satu tabel itu.

Opsi 5 – sys.foreign_keys dengan DISTINCT

Berikut contoh lain yang menggunakan DISTINCT klausa, tapi kali ini saya menanyakan sys.foreign_keys tampilan sistem.

PILIH BERBEDA OBJECT_SCHEMA_NAME(fk.parent_object_id) SEBAGAI [Skema], OBJECT_NAME(fk.parent_object_id) SEBAGAI [Tabel]FROM sys.foreign_keys AS fkORDER BY [Skema], [Tabel];

Hasil:

+----------+--------+| Skema | Tabel ||----------+---------|| dbo | Album || dbo | Artis |+----------+--------+

Dan ini dia tanpa DISTINCT klausa:

SELECT OBJECT_SCHEMA_NAME(fk.parent_object_id) AS [Schema], OBJECT_NAME(fk.parent_object_id) AS [Table]FROM sys.foreign_keys AS fkORDER BY [Schema], [Table];

Hasil:

+----------+--------+| Skema | Tabel ||----------+---------|| dbo | Album || dbo | Album || dbo | Artis |+----------+--------+

Opsi 6 – sys.foreign_keys dengan GROUP BY

Yang ini mirip dengan contoh sebelumnya karena menanyakan sys.foreign_keys tampilan sistem. Perbedaannya adalah, daripada menggunakan DISTINCT klausa, ia menggunakan GROUP BY klausa sebagai gantinya.

SELECT OBJECT_SCHEMA_NAME(fk.parent_object_id) AS [Schema], OBJECT_NAME(fk.parent_object_id) AS [Table]FROM sys.foreign_keys AS fkGROUP OLEH OBJECT_SCHEMA_NAME(fk.parent_object_object_id), OBJECT_NAME> 

Hasil:

+----------+--------+| Skema | Tabel ||----------+---------|| dbo | Album || dbo | Artis |+----------+--------+

Opsi 7 – OBJECTPROPERTYEX()

Contoh ini mungkin menggandakan beberapa contoh sebelumnya, tetapi masih layak disebut.

Salah satu contoh sebelumnya yang menggunakan OBJECTPROPERTY() fungsi, dapat dengan mudah ditulis ulang untuk menggunakan OBJECTPROPERTYEX() fungsi. Fungsi ini pada dasarnya adalah ekstensi dari OBJECTPROPERTY() , dan melakukan segalanya OBJECTPROPERTY() lakukan dan banyak lagi.

Jadi saya bisa menulis ulang contoh pertama di halaman ini dengan yang berikut:

SELECT SCHEMA_NAME(schema_id) AS [Schema], nama AS [Table]FROM sys.tablesWHERE OBJECTPROPERTYEX(object_id, 'TableHasForeignKey') =1ORDER BY [Schema], [Table];

Hasil:

+----------+--------+| Skema | Tabel ||----------+---------|| dbo | Album || dbo | Artis |+----------+--------+

Satu perbedaan yang harus Anda ketahui adalah bahwa kedua fungsi ini mengembalikan tipe pengembalian yang berbeda. OBJECTPROPERTY() mengembalikan int sedangkan OBJECTPROPERTYEX() mengembalikan sql_variant ketik.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rata-rata inkonsistensi float

  2. ISJSON() Contoh di SQL Server (T-SQL)

  3. Menyiapkan database SQL Server lokal

  4. Bagaimana Transaksi Implisit Bekerja di SQL Server

  5. Cara menggunakan SEMUA Operator Logika di SQL Server - Tutorial SQL Server / TSQL Bagian 126