首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

將資料庫納入版本控制:從理論到 SQL Server 實戰腳本方案

     編輯:關於SqlServer

程式碼版本控制(TFS/SVN/VSS/CVS)已成共識,但資料庫版控卻棘手:備份檔過大、二進位難比對。最佳實踐以腳本化 Schema 入庫。參考 Coding Horror 經典討論,作者探索 SQL Server 2005 可行落地路徑。

工具鏈選擇

  • SSMS 內建「產生腳本」輸出常因相依性順序導致無法一次執行成功。
  • scptxfr.exe 在 SQL 2005 中難覓蹤影。
  • 最終採 SQL Server Hosting Toolkit 內 Data Publishing Wizard (sqlpubwiz),支援 GUI/命令列,產出可直接執行的建庫腳本。

缺口與自動化修補

sqlpubwiz 輸出缺 CREATE DATABASE 與 USE 陳述式,直接執行會在 master 建雜物。作者編寫 Python + 批次檔封裝:

:: CreatNewdb.cmd
sqlpubwiz script -schemaonly -d %1 -f %1.sql.tmp
if exist %1.sql del %1.sql
python createNewDB.py %1
del %1.sql.tmp
# CreateNewDB.py
import sys
fmt = """USE [master]
GO
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 ")
    sys.exit()
db = sys.argv[1]
with open(db + ".sql.tmp", encoding="utf-16") as f:
    content = f.read()
with open(db + ".sql", "w", encoding="utf-8") as f:
    f.write(fmt % (db, db, db, db))
    f.write(content)

現可一鍵產出含建庫邏輯的完整腳本。

後續變更追蹤兩大路徑

策略優點挑戰
單一大腳本維護單一檔案,執行簡單變更追蹤困難,合併衝突大
物件級腳本 + 執行順序控制細粒度追蹤,易 Code Review需額外批次/腳本管理相依順序

作者傾向物件級方案,但順序管理待進一步工具化驗證。核心啟示:Schema 即代碼,腳本化入庫,自動化生成,持續整合。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved