Bagaimana saya bisa menghapus semua catatan dari semua tabel database saya? Dapatkah saya melakukannya dengan satu perintah SQL atau saya memerlukan satu perintah SQL per satu tabel?
sql
sql-server
delete-row
multi-table-delete
AndreyAkinshin
sumber
sumber
EXEC sp_MSForEachTable 'DBCC CHECKIDENT(''?'', RESEED, 0)'
setelah DELETE FROM untuk mengatur ulang semua kolom identitas kembali ke 0.DELETE failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'...
. Untuk saya bekerja:EXEC sp_MSForEachTable 'SET QUOTED_IDENTIFIER ON; DELETE FROM ?'
Biasanya saya hanya akan menggunakan proc sp_MSForEachTable yang tidak berdokumen
Lihat juga: Hapus semua data di database (bila Anda memiliki FK)
sumber
create database testing; GO use testing; create table t1 (i int primary key) create table t2(i int primary key,p int references t1)
sumber
Saya sadar ini terlambat, tetapi saya setuju dengan saran AlexKuznetsov untuk membuat skrip database, daripada harus repot membersihkan data dari tabel. Jika
TRUNCATE
solusi tidak akan berhasil, dan Anda kebetulan memiliki data dalam jumlah besar, mengeluarkanDELETE
pernyataan (dicatat) mungkin membutuhkan waktu lama, dan Anda akan ditinggalkan dengan pengidentifikasi yang belum dikirim ulang (yaituINSERT
pernyataan ke dalam tabel dengan sebuahIDENTITY
kolom akan membuat Anda sebuah ID 50000 bukan sebuah ID dari 1).Untuk membuat skrip seluruh database, di SSMS, klik kanan database, lalu pilih
TASKS
->Generate scripts
:Klik
Next
untuk melewati layar pembuka Wizard, lalu pilih objek mana yang ingin Anda skrip:Di
Set scripting options
layar, Anda dapat memilih pengaturan untuk skrip, seperti apakah akan membuat 1 skrip untuk semua objek, atau skrip terpisah untuk objek individu, dan apakah akan menyimpan file di Unicode atau ANSI:Wizard akan menampilkan ringkasan, yang dapat Anda gunakan untuk memverifikasi semuanya sesuai keinginan, dan menutupnya dengan mengklik 'Selesai'.
sumber
Pertama, Anda harus menonaktifkan semua pemicu:
Jalankan skrip ini: (Diambil dari posting ini Terima kasih @SQLMenace)
Skrip ini akan menghasilkan
DELETE
pernyataan dalam urutan yang benar. mulai dari tabel referensi kemudian tabel referensiSalin
DELETE FROM
pernyataan dan jalankan sekaliaktifkan pemicu
Lakukan perubahan:
sumber
Biasanya jauh lebih cepat untuk membuat skrip semua objek dalam database, dan membuat yang kosong, yang akan dihapus atau dipotong tabel.
sumber
Di bawah skrip yang saya gunakan untuk menghapus semua data dari database SQL Server
sumber
sumber
Sebagai jawaban alternatif, jika Anda Visual Studio SSDT atau mungkin Perbandingan Sql Gerbang Merah, Anda cukup menjalankan perbandingan skema, membuat skrip, melepaskan database lama (mungkin membuat cadangan terlebih dahulu jika ada alasan yang Anda perlukan data tersebut), lalu buat database baru dengan skrip yang dibuat oleh alat perbandingan. Sementara pada database yang sangat kecil ini mungkin lebih banyak pekerjaan, pada database yang sangat besar akan jauh lebih cepat untuk melepaskan database kemudian menangani berbagai pemicu dan batasan yang mungkin ada pada database.
sumber
Ya, dimungkinkan untuk menghapus dengan satu baris kode
sumber