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

Tidak dapat menjatuhkan objek karena direferensikan oleh batasan KUNCI ASING - Tutorial SQL Server / TSQL Bagian 74

Skenario:

Anda bekerja sebagai SQL Server DBA atau Pengembang, Anda perlu menghapus tabel dari database. Ketika Anda mengeksekusi pernyataan drop table SchemaName.TableName, Anda mendapatkan error di bawah ini.

Msg 3726, Level 16, State 1, Line 12
Tidak dapat menjatuhkan objek 'SchemaName.TableName' karena direferensikan oleh batasan FOREIGN KEY.

Sekarang kita tahu bahwa tabel direferensikan oleh Batasan Kunci Asing. Masalahnya adalah bagaimana menemukan tabel mana yang memiliki Batasan Kunci Asing yang merujuk ke tabel ini.

Solusi:

1) Ada banyak cara untuk mendapatkan informasi ini. Kita dapat menggunakan tampilan sistem untuk menemukan nama tabel yang memiliki Batasan Kunci Asing yang merujuk ke Tabel Utama kita.

SELECT Schema_Name(Schema_id) as TableSchemaName,
  object_name(FK.parent_object_id) ParentTableName,
  object_name(FK.referenced_object_id) ReferenceTableName
       FROM sys.foreign_keys AS FK
       WHERE object_name(FK.referenced_object_id)='YourTableName'
       and Schema_Name(Schema_id)='YourTableSchemaName'
 
Saya mengeksekusi skrip di atas untuk tabel pelanggan saya yang ada dalam skema dbo dan inilah yang saya dapatkan.
Cara menemukan Foreign Key tabel mana yang merujuk ke Tabel di SQL Server.


Sekarang kita tahu bahwa Ord adalah tabel yang memiliki Batasan Kunci Asing yang mereferensikan tabel kita. Kita dapat melanjutkan dan melepaskan Batasan kunci asing dan kemudian meletakkan tabel kita.

2) Gunakan Prosedur Tersimpan Sistem sp_fkeys

Kita dapat menggunakan System Stored Procedure untuk mendapatkan informasi Foreign Key Constraints yang mengacu pada tabel kita. Jika nama tabel saya adalah Pelanggan, saya dapat menjalankan skrip seperti di bawah ini
 
EXEC sp_fkeys 'Customer'
 
Cara mendapatkan nama Batasan Kunci Asing untuk Tabel di SQL Server
 sp_fkeys mengembalikan informasi yang sangat rinci, beberapa kolom tidak ditampilkan dalam snapshot di atas. berikut adalah daftar kolom yang akan dikembalikan.


  • PKTABLE_QUALIFIER
  • PKTABLE_OWNER
  • PKTABLE_NAME
  • PKCOLUMN_NAME
  • FKTABLE_QUALIFIER
  • FKTABLE_OWNER
  • FKTABLE_NAME
  • FKCOLUMN_NAME
  • KEY_SEQ
  • UPDATE_RULE
  • HAPUS_RULE
  • FK_NAME
  • PK_NAME


Demo Video :Tidak dapat melepaskan objek karena direferensikan oleh Batasan Kunci Asing



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 4 Cara Mendapatkan Riwayat Pekerjaan SQL Server

  2. SQL:Apa yang lebih baik Bit atau char (1)

  3. Ubah format waktu tanggal default pada satu database di SQL Server

  4. Beberapa pernyataan INSERT vs. INSERT tunggal dengan beberapa NILAI

  5. Jelajahi Database Pemulihan SQL Server dengan Pemulihan vs Tanpa Opsi Pemulihan