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

Cara Mengembalikan Semua Batasan Kunci Asing yang Tidak Tepercaya di SQL Server (Contoh T-SQL)

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memperkenalkan Ekspresi Tabel Umum di SQL Server

  2. Trik Cepat dan Terbaik Untuk Pemulihan File MDF SQL Server

  3. CAST(DATETIME AS DATE) melalui klausa WHERE

  4. Cara Memisahkan String di SQL Server

  5. Fungsi SQL Server ROUND():Untuk Apa dan Mengapa Anda Harus Peduli?