自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

教您如何簡(jiǎn)單刪除SQLServer數(shù)據(jù)庫(kù)的所有數(shù)據(jù)

數(shù)據(jù)庫(kù) SQL Server
下文為您介紹了使用sp_MSForEachTable存儲(chǔ)過(guò)程刪除SQL SERVER數(shù)據(jù)庫(kù)中所有數(shù)據(jù)的方法,供您參考,希望對(duì)您能夠有所啟示。

SQL SERVER數(shù)據(jù)庫(kù)數(shù)據(jù)之間可能形成相互約束關(guān)系,刪除操作可能會(huì)出現(xiàn)問(wèn)題陷入死循環(huán),下面將為您介紹一個(gè)簡(jiǎn)單刪除SQL SERVER數(shù)據(jù)庫(kù)數(shù)據(jù)的方法,供您參考。

也許很多讀者朋友都經(jīng)歷過(guò)這樣的事情:要在開(kāi)發(fā)數(shù)據(jù)庫(kù)基礎(chǔ)上清理一個(gè)空庫(kù),但由于對(duì)數(shù)據(jù)庫(kù)結(jié)構(gòu)缺乏整體了解,在刪除一個(gè)表的記錄時(shí),刪除不了,因?yàn)榭赡苡型怄I約束,一個(gè)常見(jiàn)的數(shù)據(jù)庫(kù)結(jié)構(gòu)是一個(gè)主表,一個(gè)子表,這種情況下一般都得先刪除子表記錄,再刪除主表記錄。

說(shuō)到刪除數(shù)據(jù)記錄,往往馬上會(huì)想到的是delete和truncate語(yǔ)句,但在遇到在兩個(gè)或多個(gè)表之間存在約束的話,這兩個(gè)語(yǔ)句可能都會(huì)失效,而且最要命的是這兩個(gè)命令都只能一次操作一個(gè)表。那么真正遇到要?jiǎng)h除SQL Server數(shù)據(jù)庫(kù)中所有記錄時(shí),該怎么辦呢?有兩個(gè)選擇:

1.按照先后順序逐個(gè)刪除,這個(gè)方法在表非常多的情況下顯得很不現(xiàn)實(shí),即便是表數(shù)量不多,但約束比較多時(shí),你還是要花費(fèi)大量的時(shí)間和精力去研究其間的約束關(guān)系,然后找出先刪哪個(gè)表,再刪哪個(gè)表,最后又刪哪個(gè)表。

2.禁用所有約束,刪除所有數(shù)據(jù),最后再啟用約束,這樣就不用花時(shí)間和精力去研究什么約束了,只需要編寫(xiě)一個(gè)簡(jiǎn)單的存儲(chǔ)過(guò)程就可以自動(dòng)完成這個(gè)任務(wù)。
從這兩個(gè)選擇中不難看出第二個(gè)選擇是最簡(jiǎn)單有效的了,那么在使用第二個(gè)選擇時(shí),具體該怎么實(shí)施呢?

首先得編寫(xiě)代碼循環(huán)檢查所有的表,這里我推薦一個(gè)存儲(chǔ)過(guò)程sp_MSForEachTable,因?yàn)樵谖④浀墓俜轿臋n中沒(méi)有對(duì)這個(gè)存儲(chǔ)過(guò)程有描述,很多開(kāi)發(fā)人員也許都還未曾聽(tīng)說(shuō),所以你在互聯(lián)網(wǎng)上搜索得到的解決辦法大多很復(fù)雜,也許有的人會(huì)認(rèn)為,既然沒(méi)有官方文檔,這個(gè)存儲(chǔ)過(guò)程可能會(huì)不穩(wěn)定,打心理上會(huì)排斥它,但事實(shí)并非如此。下面來(lái)先看一個(gè)完整的腳本:

CREATE PROCEDURE sp_DeleteAllDataASEXEC 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

這個(gè)腳本創(chuàng)建了一個(gè)命名為sp_DeleteAllData的存儲(chǔ)過(guò)程,前面兩行語(yǔ)句分別禁用約束和觸發(fā)器,第三條語(yǔ)句才是真正地刪除所有數(shù)據(jù),接下里的語(yǔ)句分別還原約束和觸發(fā)器,最后一條語(yǔ)句是顯示每個(gè)表中的記錄,當(dāng)然這條語(yǔ)句也可以不要,我只是想確認(rèn)一下是否清空了所有表而已。

 

責(zé)任編輯:段燃 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2010-10-14 10:18:28

MySQL數(shù)據(jù)庫(kù)備份

2009-03-02 16:52:59

SQL數(shù)據(jù)庫(kù)開(kāi)發(fā)

2010-09-03 14:14:16

SQL刪除

2010-09-30 11:04:47

DB2數(shù)據(jù)庫(kù)卸載

2010-08-26 17:19:36

DB2數(shù)據(jù)庫(kù)備份

2010-08-25 14:42:46

DB2AIX卸載

2010-08-25 14:12:47

DB2備份恢復(fù)

2010-09-13 16:46:10

SQL Server觸

2010-08-26 14:01:59

DB2插入特殊字符

2010-09-30 09:42:22

DB2刪除數(shù)據(jù)

2011-05-13 09:42:21

2010-09-24 18:47:23

SQL數(shù)據(jù)分頁(yè)

2009-12-11 13:43:55

PHP獲得所有數(shù)據(jù)庫(kù)

2011-04-15 13:41:27

SqlServer數(shù)據(jù)復(fù)制

2010-11-10 13:54:27

SQL SERVER自

2010-10-27 16:56:05

Oracle重復(fù)記錄

2011-03-01 09:53:18

卸載PureFTPd

2010-09-07 11:09:33

SQL語(yǔ)句

2021-12-21 15:56:13

SolarWinds

2010-11-23 13:29:36

MySQL數(shù)據(jù)列類型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)