Jika saya ingin menghapus semua tabel dalam database saya seperti ini, apakah ini akan menangani batasan kunci asing? Jika tidak, bagaimana saya mengatasinya terlebih dahulu?
GO
IF OBJECT_ID('dbo.[Course]','U') IS NOT NULL
DROP TABLE dbo.[Course]
GO
IF OBJECT_ID('dbo.[Student]','U') IS NOT NULL
DROP TABLE dbo.[Student]
Jawaban:
Tidak, ini tidak akan menjatuhkan meja Anda jika memang ada kunci asing yang merujuknya.
Untuk mendapatkan semua hubungan kunci asing yang merujuk tabel Anda, Anda bisa menggunakan SQL ini (jika Anda menggunakan SQL Server 2005 dan lebih tinggi):
dan jika ada, dengan pernyataan ini di sini, Anda dapat membuat pernyataan SQL untuk benar-benar menghentikan hubungan FK tersebut:
sumber
Di SQL Server Management Studio 2008 (R2) dan yang lebih baru, Anda bisa Klik kanan pada
Pilih tabel yang ingin Anda DROP.
Pilih "Simpan ke jendela permintaan baru".
Klik pada tombol Advanced.
Tetapkan Script DROP dan BUAT ke Script DROP.
Tetapkan Script Foreign Keys ke True.
Klik OK.
Klik Berikutnya -> Selanjutnya -> Selesai.
Lihat skrip dan kemudian Jalankan.
sumber
Jika Anda menjatuhkan tabel "child" terlebih dahulu, kunci asing akan dijatuhkan juga. Jika Anda mencoba untuk menjatuhkan tabel "induk" terlebih dahulu, Anda akan mendapatkan "Tidak dapat menjatuhkan objek 'a' karena direferensikan oleh batasan KUNCI ASING." kesalahan.
sumber
Berikut ini cara lain untuk menjatuhkan semua tabel dengan benar, menggunakan
sp_MSdropconstraints
prosedur. Kode terpendek yang dapat saya pikirkan:sumber
Jika itu SQL Server, Anda harus membuang kendala sebelum Anda bisa menjatuhkan tabel.
sumber
Versi yang sedikit lebih umum dari apa yang diposting @mark_s, ini membantu saya
cukup tancapkan nama tabel Anda, dan jalankan hasilnya.
sumber
Berikut cara lain untuk menghapus semua kendala yang diikuti oleh tabel itu sendiri, menggunakan trik gabungan yang melibatkan
FOR XML PATH('')
yang memungkinkan penggabungan beberapa baris input menjadi satu baris output tunggal. Harus bekerja pada apa pun SQL 2005 & yang lebih baru.Saya telah meninggalkan perintah EXECUTE untuk keamanan.
sumber
Berikut ini adalah skrip lengkap untuk mengimplementasikan solusi:
sumber
sumber
Menggunakan SQL Server Manager Anda bisa menghilangkan batasan kunci asing dari UI. Jika Anda ingin menghapus tabel
Diary
tetapi tabel pengguna memiliki kunci asing yangDiaryId
menunjuk keDiary
tabel, Anda bisa memperluas (menggunakan simbol plus)User
tabel dan kemudian memperluasForeign Keys
bagian. Klik kanan pada kunci asing yang menunjuk ke tabel buku harian lalu pilihDelete
. Anda kemudian dapat memperluasColumns
bagian, klik kanan dan hapus kolomDiaryId
juga. Maka Anda bisa menjalankan:Saya tahu pertanyaan Anda yang sebenarnya adalah tentang menghapus semua tabel, jadi ini mungkin tidak berguna untuk kasus itu. Namun, jika Anda hanya ingin menghapus beberapa tabel, ini berguna, saya yakin (judulnya tidak menyebutkan secara eksplisit menghapus semua tabel).
sumber
Jika Anda menggunakan server mysql dan jika Anda tidak keberatan kehilangan tabel, Anda dapat menggunakan kueri sederhana untuk menghapus beberapa tabel sekaligus:
Dengan cara ini tidak masalah dalam urutan apa Anda menggunakan tabel dalam kueri Anda.
Jika ada yang akan mengatakan sesuatu tentang fakta bahwa ini bukan solusi yang baik jika Anda memiliki database dengan banyak tabel: Saya setuju!
sumber
Incorrect syntax near '='. (102) (SQLExecDirectW)
foreign_key_checks
tidak akan bekerja di server MSSQL. Saya pikir itu adalah variabel spesifik MySql.jalankan kode di bawah ini untuk mendapatkan nama batasan kunci asing yang memblokir drop Anda. Sebagai contoh, saya mengambil
roles
tabel.Anda akan mendapatkan nama FK seperti di bawah ini:
FK__Table1__roleId__1X1H55C1
sekarang jalankan kode di bawah ini untuk menghapus referensi FK yang didapat dari atas.
Selesai!
sumber
Maka jauh lebih mudah untuk menghapus seluruh basis data:
sumber
Jika Anda ingin
DROP
tabel yang telah dirujuk oleh tabel lain menggunakan penggunaan kunci asingDROP TABLE *table_name* CASCADE CONSTRAINTS;
Saya pikir itu akan berhasil untuk Anda.
sumber
cascade constraints
dalam server sql