程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> Sql Server中清空一切數據表中的記載

Sql Server中清空一切數據表中的記載

編輯:MSSQL

Sql Server中清空一切數據表中的記載。本站提示廣大學習愛好者:(Sql Server中清空一切數據表中的記載)文章只能為提供參考,不一定能成為您想要的結果。以下是Sql Server中清空一切數據表中的記載正文


Sql Server中清空一切數據表中的記載

清空一切數據表中的記載:

exec sp_msforeachtable  @Command1 ='truncate table ?'

刪除一切數據表:

exec sp_msforeachtable 'delete   N''?'''

清空SQL Server數據庫中一切表數據的辦法(有束縛的情形)

其實刪除數據庫中數據的辦法其實不龐雜,為何我還要畫蛇添足呢,一是我這裡引見的是刪除數據庫的一切數據,由於數據之間能夠構成互相束縛關系,刪除操作能夠墮入逝世輪回,二是這裡應用了微軟未正式地下的sp_MSForEachTable存儲進程。

  或許許多讀者同伙都閱歷過如許的工作:要在開辟數據庫基本上清算一個空庫,但因為對數據庫構造缺少全體懂得,在刪除一個表的記載時,刪除不了,由於能夠有外鍵束縛,一個罕見的數據庫構造是一個主表,一個子表,這類情形下普通都得先刪除子表記載,再刪除主表記載。

  說道刪除數據記載,常常立時會想到的是delete和truncate語句,但在碰到在兩個或多個表之間存在束縛的話,這兩個語句能夠都邑掉效,並且最要命的是這兩個敕令都只能一次操作一個表。那末真正碰到要刪除SQL Server數據庫中一切記載時,該怎樣辦呢?有兩個選擇:

  1.依照前後次序逐一刪除,這個辦法在表異常多的情形下顯得很不實際,即使是表數目不多,但束縛比擬多時,你照樣要消費年夜量的時光和精神去研討其間的束縛關系,然後找出先刪哪一個表,再刪哪一個表,最初又刪哪一個表。

  2.禁用一切束縛,刪除一切數據,最初再啟用束縛,如許就不消花時光和精神去研討甚麼束縛了,只須要編寫一個簡略的存儲進程便可以主動完成這個義務。


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

從這兩個選擇中不好看出第二個選擇是最簡略有用的了,那末在應用第二個選擇時,詳細該怎樣實行呢?

  起首得編寫代碼輪回檢討一切的表,這裡我推舉一個存儲進程sp_MSForEachTable,由於在微軟的官方文檔中沒有對這個存儲進程有描寫,許多開辟人員或許都還不曾據說,所以你在互聯網上搜刮獲得的處理方法年夜多很龐雜,或許有的人會以為,既然沒有官方文檔,這個存儲進程能夠會不穩固,打心思上會排擠它,但現實並不是如斯。上面來先看一個完全的劇本:

  這個劇本創立了一個定名為sp_DeleteAllData的存儲進程,後面兩行語句分離禁用束縛和觸發器,第三條語句才是真正地刪除一切數據,接下裡的語句分離復原束縛和觸發器,最初一條語句是顯示每一個表中的記載,固然這條語句也能夠不要,我只是想確認一下能否清空了一切表罷了。

  你可以在任何數據庫上運轉這個存儲進程,固然不要在生成數據庫上運轉,可別怪我沒告知你!不論如何,照樣先備份一下數據庫,應用備份數據庫復原,然後再運轉該存儲進程,呵呵,即便是一個年夜型數據庫,也要不多長時光,你的數據庫就成一個空庫了

第三種辦法:TRUNCATE TABLE

在sql server數據庫中疾速刪除記載,清空表若要刪除表中的一切行,則 TRUNCATE TABLE 語句是一種疾速、無日記記載的辦法。TRUNCATE TABLE 與不含有 WHERE 子句的 DELETE 語句在功效上雷同。然則,TRUNCATE TABLE 速度更快,而且應用更少的體系資本和事務日記資本。

與 DELETE 語句比擬,TRUNCATE TABLE 具有以下長處:

所用的事務日記空間較少。

DELETE 語句每次刪除一行,並在事務日記中為所刪除的每行記載一項。TRUNCATE TABLE 經由過程釋放用於存儲表數據的數據頁來刪除數據,而且在事務日記中只記載頁釋放。

應用的鎖平日較少。

當應用行鎖履行 DELETE 語句時,將鎖定表中各行以便刪除。TRUNCATE TABLE 一直鎖定表和頁,而不是鎖定各行。

如無破例,在表中不會留有任何頁。

履行 DELETE 語句後,表仍會包括空頁。例如,必需至多應用一個排他 (LCK_M_X) 表鎖,能力釋放堆中的空表。假如履行刪除操作時沒有應用表鎖,表(堆)中將包括很多空頁。關於索引,刪除操作會留下一些空頁,雖然這些頁會經由過程後台消除過程敏捷釋放。

與 DELETE 語句雷同,應用 TRUNCATE TABLE 清空的表的界說與其索引和其他聯系關系對象一路保存在數據庫中。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved