為何把你的數(shù)據(jù)庫(kù)置于版本控制之下_Mssql數(shù)據(jù)庫(kù)教程
推薦:詳解SQL Server數(shù)據(jù)體系和應(yīng)用程序邏輯在許多用SQL Server實(shí)現(xiàn)的新的企業(yè)系統(tǒng)設(shè)計(jì)中,系統(tǒng)設(shè)計(jì)師需要在給數(shù)據(jù)結(jié)構(gòu)和管理應(yīng)用程序邏輯的定位上做出具有關(guān)鍵性意義的決定。SQL Server有它自己的編程語(yǔ)言(Transact-SQL,即TSQL),開(kāi)發(fā)者可以用它來(lái)管理數(shù)據(jù)訪問(wèn)、代碼事務(wù)邏輯和交易控制。 使用TSQL,
做程序開(kāi)發(fā)的人都知道版本控制的重要性, 代碼的管理好說(shuō),TFS/SVN/VSS/CVS,哪個(gè)都能用。但涉及到數(shù)據(jù)庫(kù)的版本控制,就不是太好做的。有的team是定期把數(shù)據(jù)庫(kù)的備份放到服務(wù)器上,但一來(lái)數(shù)據(jù)庫(kù)備份太大,而來(lái)二進(jìn)制的備份文件沒(méi)有簡(jiǎn)單的diff工具來(lái)比較變化。一個(gè)比較好的實(shí)踐是把數(shù)據(jù)庫(kù)的架構(gòu)用腳本來(lái)表示。相關(guān)的討論可以Google之,前面幾篇文章,如 Coding Horror: Is Your Database Under Version Control?, 。遺憾的是中文沒(méi)能Google出什么有意義的文章。
理論有了,下面就是實(shí)踐的問(wèn)題。怎么生成和管理腳本。SQLServer2005右鍵點(diǎn)擊數(shù)據(jù)庫(kù),[任務(wù)]->[腳本生成]能生成一堆腳本,但我還不知道有誰(shuí)能夠在不修改原始輸出的情況下一次性運(yùn)行成功這些腳本。搜了一把,生成SQLServer數(shù)據(jù)庫(kù)腳本四法里介紹了一個(gè)scptxfr.exe,遺憾的是我沒(méi)能在SQLServer2005里找到這個(gè)工具。倒是在SQLServer Hosting Toolkit里找到了一個(gè)Data Publishing Wizard能生成可用的數(shù)據(jù)庫(kù)創(chuàng)建腳本,這個(gè)工具支持GUI和命令行,用起來(lái)很是方便。遺憾的是生成的腳本里只包含schema和下一級(jí)表、視圖、存儲(chǔ)過(guò)程等對(duì)象的名稱,而不包含數(shù)據(jù)庫(kù)名,害得我一運(yùn)行,master數(shù)據(jù)庫(kù)里多了一堆表。為了解決這個(gè)問(wèn)題,我用python寫(xiě)了個(gè)腳本來(lái)生成創(chuàng)建數(shù)據(jù)庫(kù)和using數(shù)據(jù)庫(kù)的語(yǔ)句,再用了一個(gè)命令行封裝一下。
CreatNewdb.cmd:
|
以下為引用的內(nèi)容: sqlpubwiz script -schemaonly -d %1 -f %1.sql.tmp echo "publish done" if exist %1.sql del %1.sql echo "adding database creating statements" python createNewDB.py %* del %1.sql.tmp |
CreateNewDB.py
|
以下為引用的內(nèi)容: import sys
fmt = """ USE [master] GO /****** object: Database [%s] ******/ IF EXISTS (SELECT name FROM sys.databases WHERE name = N'%s') DROP DATABASE [%s] GO CREATE DATABASE [%s] GO USE [%s] """ if len(sys.argv) != 2: print("createNewDB <database name>") sys.exit() databaseName = sys.argv[1] inFile = open(databaseName + ".sql.tmp", encoding="utf-16") content = inFile.read() inFile.close() outFile = open(databaseName + ".sql", "w", encoding="utf-8") outFile.write(fmt % (databaseName, databaseName, databaseName, databaseName, databaseName)) outFile.write(content) |
現(xiàn)在基本解決了數(shù)據(jù)庫(kù)創(chuàng)建腳本的問(wèn)題。但后續(xù)的修改如何跟蹤?
一是維護(hù)一個(gè)大的創(chuàng)建腳本。好處是只需要維護(hù)一個(gè)腳本,執(zhí)行起來(lái)也比較方便。但跟蹤變化不是一件很容易的事情。
二是維持?jǐn)?shù)據(jù)庫(kù)創(chuàng)建腳本的相對(duì)穩(wěn)定,要修改一個(gè)數(shù)據(jù)庫(kù)對(duì)象時(shí)就為該對(duì)象創(chuàng)建一個(gè)腳本。好處是容易跟蹤變化,但腳本執(zhí)行的順序不易維護(hù),還需要再寫(xiě)一個(gè)批處理命令來(lái)按一定書(shū)序調(diào)用這些sql腳本。
都是一些想法,還有待實(shí)踐檢驗(yàn)。
分享:解決SQL Server 2005數(shù)據(jù)庫(kù)批量更新的辦法這些天因?yàn)橛袛?shù)據(jù)割接的需求,于是有要寫(xiě)關(guān)于批量更新的程序。我們的數(shù)據(jù)庫(kù)使用的是SQLSERVER2005,碰到了一些問(wèn)題來(lái)分享下。 首先注意Statement 和PreparedStatement的問(wèn)題 Statement sm = cn.createStatement(); sm.addBatch(sql1); sm.addBatch(sql2); ..
- sql 語(yǔ)句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個(gè)方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無(wú)法查看數(shù)據(jù)庫(kù),提示 無(wú)法為該請(qǐng)求檢索數(shù)據(jù) 錯(cuò)誤916解決方法
- SQLServer日志清空語(yǔ)句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲(chǔ)過(guò)程參數(shù)的用法實(shí)例詳解
Mssql數(shù)據(jù)庫(kù)教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫(kù)教程推薦
- 詳解Microsoft SQL Server數(shù)據(jù)庫(kù)開(kāi)發(fā)問(wèn)題
- 跟蹤SQL 2008的變更數(shù)據(jù)可變部分
- 怎樣升級(jí)SQL Server 2008數(shù)據(jù)庫(kù)引擎
- 解讀SQL中自己創(chuàng)建函數(shù) 分割字符串
- 談SQL將挑戰(zhàn)操作系統(tǒng)安全
- SQL Server 數(shù)據(jù)庫(kù)恢復(fù)日志功能
- SQL Server 2008:開(kāi)辟嶄新數(shù)據(jù)平臺(tái)
- 詳解數(shù)據(jù)庫(kù)導(dǎo)出成excel的sql語(yǔ)句
- 談SQL Server的空值處理策略
- SQL Server儲(chǔ)過(guò)程加密和解密原理深入分析
猜你也喜歡看這些
- 用MyEclipse配置DataBase Explorer(圖示)
- 遠(yuǎn)程連接mysql數(shù)據(jù)庫(kù)注意點(diǎn)記錄
- C# Mysql 查詢 Rownum的解決方法
- Mysql兩種情況下更新字段中部分?jǐn)?shù)據(jù)的方法
- MySQL如何設(shè)置密碼
- MySQL筆記之基本查詢的應(yīng)用詳解
- 解析mysql中:單表distinct、多表group by查詢?nèi)コ貜?fù)記錄
- 通過(guò)mysqladmin遠(yuǎn)程管理mysql的方法
- Mysql中“Insert into xxx on duplicate key update”問(wèn)題
- MYSQL索引無(wú)效和索引有效的詳細(xì)介紹
- 相關(guān)鏈接:
- 教程說(shuō)明:
Mssql數(shù)據(jù)庫(kù)教程-為何把你的數(shù)據(jù)庫(kù)置于版本控制之下
。