也許很多讀者朋友都經歷過這樣的事情:要在開發資料庫基礎上清理一個空庫,但由於對資料庫結構缺乏整體了解,在刪除一個表的記錄時,刪除不了,因為可能有外鍵約束,一個常見的資料庫結構是一個主表,一個子表,這種情況下一般都得先刪除子表記錄,再刪除主表記錄。
1.按照先後順序逐個刪除,這個方法在表非常多的情況下顯得很不現實,即便是表數量不多,但約束比較多時,你還是要花費大量的時間和精力去研究其間的約束關系,然後找出先刪哪個表,再刪哪個表,最後又刪哪個表。
首先得編寫代碼循環檢查所有的表,這里我推薦一個存儲過程sp_MSForEachTable,因為在微軟的官方文檔中沒有對這個存儲過程有描述,很多開發人員也許都還未曾聽說,所以你在互聯網上搜索得到的解決辦法大多很復雜,也許有的人會認為,既然沒有官方文檔,這個存儲過程可能會不穩定,打心理上會排斥它,但事實並非如此。下面來先看一個完整的腳本:
這個腳本創建了一個命名為sp_DeleteAllData的存儲過程,前面兩行語句分別禁用約束和觸發器,第三條語句才是真正地刪除所有數據,接下里的語句分別還原約束和觸發器,最後一條語句是顯示每個表中的記錄,當然這條語句也可以不要,我只是想確認一下是否清空了所有表而已。
❷ 怎麼批量刪除sql2008表裡面的數據
在Microsoft SQL Server Management Studio中按F7,在左側的對象資源管理器中選擇「資料庫」,在右側的對象資源管理器詳細信息中通過滑鼠框選要刪除的資料庫,按del鍵刪除即可。
❸ sqlserver怎麼一次刪除兩張表裡的記錄
使用存儲過程,把兩個delete語句寫在一個存儲過程中
為其中的某一張表添加delete觸發器
❹ sqlserver 怎麼清空表
deletefromtablenamewhere1=1
❺ 如何使用一條sql語句刪除多張表中的數據
在源表中使用觸發器,把這些相應表都一並刪除。
或是設置主外鍵,使之級聯刪除。
❻ 如何在SQLSERVER中快速有條件刪除海量數據
例:update表setbit欄位=bit欄位-1 最近有個朋友問我,他說他在SQLSERVER刪除幾百萬到幾千萬數據是顯的很慢,幫他分析了一下,提了一些以下意見,或許對很多人有用,再者也好長沒寫過BLOG了,一起探討一下 如果你的硬碟空間小,並且不想設置資料庫的日誌為最小(因為希望其他正常的日誌希望仍然記錄),而且對速度要求比較高,並清除所有的數據建議你用turncatetable1,因為truncate是DDL操作,不產生rollback,不寫日誌速度快一些,然後如果有自增的話,恢復到1開始,而delete會產生rollback,如果刪除大數據量的錶速度會很慢,同時會佔用很多的rollbacksegments,同時還要記錄下G級別的日誌;當然如果有條件刪除比如wheretime<'2006-3-10'怎麼辦,能不能不記錄日誌用delete,回答是不行的,SQLServer引擎在設計上就會對Delete操作進行日誌記錄。至今沒有辦法強制制定某一些語句不記錄到日誌中,如果在執行DeleteTable1whereTime<'2006-3-10'由於涉及的記錄比較多,所以日誌記錄也相應很大(3-4G),如果可行,我建議用以下方式: 選出您所需要保留的記錄到新的表。如果您使用FullRecoveryMode 根據SelectINTO的記錄數,日誌可能會比較大 然後直接TruncateTable1。無論何種恢復模式都不會進行日誌記錄
❼ sqlserver表中需要刪除幾十條數據(共有一萬條),但是刪除完了之後我還希望ID是連續的,這應該怎麼操作。
不用寫sql就行。
你先刪除,然後右鍵表名,設計,把id列刪除掉,保存,然後再右鍵,設計,添加一個id列,然後設置成自增id就行了。
前提是,你之前的id沒有跟其他表有什麼關聯,否則就弄錯了。對應不上。
❽ sqlserver兩張表數據聯級刪除問題
給你做個簡單試驗吧
創建class表,里邊其他欄位我就略了
createtableclass(classidintnotnullprimarykey,
classnamevarchar(20))
創建學生表
createtablestudent(studentidintnotnullprimarykey,
studentnamevarchar(10),
classidint)
添加外鍵級聯刪除或更新約束
_classidforeignkey(classid)referencesclass(classid)
向class表增加數據
insertintoclassvalues(1,'1班')
insertintoclassvalues(2,'2班')
向student表增加數據
insertintostudentvalues(1,'aa',1)
insertintostudentvalues(2,'bb',2)
insertintostudentvalues(3,'cc',3)--這條是增加不進去的,會報錯
刪除class表裡一班的數據
deletefromclasswhereclassid=1
檢查 student 表裡數據
這個時候你就發現,為1班學生的那數據也同時被刪了
❾ SQL怎麼用DELETE刪除多條數據
1、首先,選擇資料庫。
❿ sqlserver怎麼批量刪除大量數據
刪除大量數據速度是正常的。
如果表裡面數據都不要了,可以直接truncate
如果表裡面數據只有一小部分要得,可以把小的備份出來,然後truncate表,然後再把備份的數據導回來
如果只是刪除表中部分數據,可以寫成循環小批量刪除腳本;如果伺服器性能好,百萬數據刪除還是很快的