一次性清空某個庫中所有表數據的sql

在我們項目開發過程中,經常遇到需要在開發數據庫基礎上清理一個空庫,

但由於對數據庫結構缺乏整體瞭解,在刪除一個表的記錄時,刪除不了,

因爲可能有外鍵約束,一個常見的數據庫結構是一個主表,一個子表,

這種情況下一般都得先刪除子表記錄,再刪除主表記錄。

說到刪除數據記錄,往往馬上會想到的是delete和truncate語句,

但在遇到在兩個或多個表之間存在約束的話,這兩個語句可能都會失效,

而且最要命的是這兩個命令都只能一次操作一個表。

如果手動一個個的去刪除表實在太麻煩了。偷懶的思路如下:

禁用所有約束,刪除所有數據,最後再啓用約束,這樣就不用花時間和精力

去研究什麼約束了,只需要編寫一個簡單的存儲過程就可以自動完成這個任務。

Procedure代碼如下:

CREATE PROCEDURE sp_DeleteAllData
AS
--禁用約束和觸發器
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'
--刪除數據
EXEC sp_MSForEachTable 'DELETE FROM ?'
--還原約束和觸發器
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL'
--顯示錶結構
EXEC sp_MSFOREACHTABLE 'SELECT * FROM ?'
GO

你可以在任何數據庫上運行這個存儲過程,當然不要在生成數據庫上運行,

可別怪我沒告訴你!不管怎樣,還是先備份一下數據庫,使用備份數據庫還原,

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章