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