今天工作中遇到一種情況:老大要在服務器上重建數據庫,要通過執行之前從數據庫導出的Insert的sql文件來生成,不直接用.bak備份文件還原。
目前的狀況是:
1、本地有一個包含測試數據的數據庫,其中有開發測試過程中創建的很多有用的數據。老大用sqlserver把數據導出到了一個sql文件中。
2、有初始化數據庫的sql文件,包括創建表及插入一些固定的內置數據。
現在就是要用初始化數據庫的sql文件和包含所有測試數據的sql文件來重新創建一個新的數據庫。問題是,測試數據中也包含了內置數據,執行插入測試數據的sql會報很多“不能插入重複鍵”的錯誤(這個其實無關緊要,既然報錯,這句sql就不會執行,所以不會重複插入,只要保證執行結果報的錯就只有“有重複鍵”這一種即可)。
step1:
說明:去掉數據庫所有約束
--Disable all the constraint in database
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"step2:
刪除數據庫中所有的表中的數據
select 'truncate table ' + Name + ';' from sysobjects where xtype='U' order by name asc;
該條語句執行之後會將數據庫中所有的表都查詢出來,將執行結果複製出來之後執行
step3:
執行insert的sql文件語句
step4:
說明:恢復數據庫所有約束
--Enable all the constraint in database
EXECsp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
記錄一下,只是想記一下上面的幾條sql命令及用法,日積月累...