首頁 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡(luò)課程 模擬考試 考友錄 實(shí)用文檔 求職招聘 論文下載
2011中考 | 2011高考 | 2012考研 | 考研培訓(xùn) | 在職研 | 自學(xué)考試 | 成人高考 | 法律碩士 | MBA考試
MPA考試 | 中科院
四六級(jí) | 職稱英語 | 商務(wù)英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT
新概念英語 | 成人英語三級(jí) | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學(xué)習(xí) | 法語 | 德語 | 韓語
計(jì)算機(jī)等級(jí)考試 | 軟件水平考試 | 職稱計(jì)算機(jī) | 微軟認(rèn)證 | 思科認(rèn)證 | Oracle認(rèn)證 | Linux認(rèn)證
華為認(rèn)證 | Java認(rèn)證
公務(wù)員 | 報(bào)關(guān)員 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 期貨從業(yè)資格 | 司法考試 | 法律顧問 | 導(dǎo)游資格
報(bào)檢員 | 教師資格 | 社會(huì)工作者 | 外銷員 | 國際商務(wù)師 | 跟單員 | 單證員 | 物流師 | 價(jià)格鑒證師
人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業(yè)資格 | 廣告師職業(yè)水平
駕駛員 | 網(wǎng)絡(luò)編輯
衛(wèi)生資格 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 執(zhí)業(yè)護(hù)士
會(huì)計(jì)從業(yè)資格考試會(huì)計(jì)證) | 經(jīng)濟(jì)師 | 會(huì)計(jì)職稱 | 注冊(cè)會(huì)計(jì)師 | 審計(jì)師 | 注冊(cè)稅務(wù)師
注冊(cè)資產(chǎn)評(píng)估師 | 高級(jí)會(huì)計(jì)師 | ACCA | 統(tǒng)計(jì)師 | 精算師 | 理財(cái)規(guī)劃師 | 國際內(nèi)審師
一級(jí)建造師 | 二級(jí)建造師 | 造價(jià)工程師 | 造價(jià)員 | 咨詢工程師 | 監(jiān)理工程師 | 安全工程師
質(zhì)量工程師 | 物業(yè)管理師 | 招標(biāo)師 | 結(jié)構(gòu)工程師 | 建筑師 | 房地產(chǎn)估價(jià)師 | 土地估價(jià)師 | 巖土師
設(shè)備監(jiān)理師 | 房地產(chǎn)經(jīng)紀(jì)人 | 投資項(xiàng)目管理師 | 土地登記代理人 | 環(huán)境影響評(píng)價(jià)師 | 環(huán)保工程師
城市規(guī)劃師 | 公路監(jiān)理師 | 公路造價(jià)師 | 安全評(píng)價(jià)師 | 電氣工程師 | 注冊(cè)測繪師 | 注冊(cè)計(jì)量師
繽紛校園 | 實(shí)用文檔 | 英語學(xué)習(xí) | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲

最簡單刪除SQLServer中所有數(shù)據(jù)的方法介紹

  其實(shí)刪除數(shù)據(jù)庫中數(shù)據(jù)的方法并不復(fù)雜,為什么我還要多此一舉呢,一是我這里介紹的是刪除數(shù)據(jù)庫的所有數(shù)據(jù),因?yàn)閿?shù)據(jù)之間可能形成相互約束關(guān)系,刪除操作可能陷入死循環(huán),二是這里使用了微軟未正式公開的sp_MSForEachTable存儲(chǔ)過程。

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

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

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

  2.禁用所有約束,刪除所有數(shù)據(jù),最后再啟用約束,這樣就不用花時(shí)間和精力去研究什么約束了,只需要編寫一個(gè)簡單的存儲(chǔ)過程就可以自動(dòng)完成這個(gè)任務(wù)。

  從這兩個(gè)選擇中不難看出第二個(gè)選擇是最簡單有效的了,那么在使用第二個(gè)選擇時(shí),具體該怎么實(shí)施呢?

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

  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

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

  你可以在任何數(shù)據(jù)庫上運(yùn)行這個(gè)存儲(chǔ)過程,當(dāng)然不要在生成數(shù)據(jù)庫上運(yùn)行,可別怪我沒告訴你!不管怎樣,還是先備份一下數(shù)據(jù)庫,使用備份數(shù)據(jù)庫還原,然后再運(yùn)行該存儲(chǔ)過程,呵呵,即使是一個(gè)大型數(shù)據(jù)庫,也要不多長時(shí)間,你的數(shù)據(jù)庫就成一個(gè)空庫了!

  相關(guān)推薦:全國計(jì)算機(jī)等級(jí)考試將于3月28日至4月1日舉行
       2009年全國計(jì)算機(jī)等級(jí)考試各科目考試大綱
       2009上半年計(jì)算機(jī)等級(jí)考試各地報(bào)名時(shí)間匯總
文章搜索
版權(quán)聲明:如果計(jì)算機(jī)等級(jí)考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系800@exam8.com,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本計(jì)算機(jī)等級(jí)考試網(wǎng)內(nèi)容,請(qǐng)注明出處。