Saat menangani penghapusan data dari tabel yang memiliki hubungan kunci asing - yang pada dasarnya adalah kasus dengan basis data yang dirancang dengan benar - kita dapat menonaktifkan semua batasan, menghapus semua data, lalu mengaktifkan kembali batasan
-- disable all constraints
EXEC sp_MSForEachTable "ALTER TABLE ? NOCHECK CONSTRAINT all"
-- delete data in all tables
EXEC sp_MSForEachTable "DELETE FROM ?"
-- enable all constraints
exec sp_MSForEachTable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
Selengkapnya tentang menonaktifkan batasan dan pemicu di sini
jika beberapa tabel memiliki kolom identitas, kami mungkin ingin melakukan seed ulang
EXEC sp_MSForEachTable "DBCC CHECKIDENT ( '?', RESEED, 0)"
Perhatikan bahwa perilaku RESEED berbeda antara tabel baru, dan tabel yang telah memasukkan beberapa data sebelumnya dari BOL:
DBCC CHECKIDENT ('table_name', RESEED, newReseedValue)
Nilai identitas saat ini disetel ke newReseedValue. Jika tidak ada baris yang dimasukkan ke tabel sejak dibuat, baris pertama yang dimasukkan setelah menjalankan DBCC CHECKIDENT akan menggunakan newReseedValue sebagai identitas. Jika tidak, baris berikutnya yang disisipkan akan menggunakan newReseedValue + 1. Jika nilai newReseedValue kurang dari nilai maksimum pada kolom identitas, pesan kesalahan 2627 akan dibuat pada referensi berikutnya ke tabel.
Terima kasih kepada Robert karena menunjukkan fakta bahwa penonaktifan batasan tidak memungkinkan untuk menggunakan truncate, batasan harus dihilangkan, dan kemudian dibuat ulang