程式碼版本控制(TFS/SVN/VSS/CVS)已成共識,但資料庫版控卻棘手:備份檔過大、二進位難比對。最佳實踐以腳本化 Schema 入庫。參考 Coding Horror 經典討論,作者探索 SQL Server 2005 可行落地路徑。
scptxfr.exe 在 SQL 2005 中難覓蹤影。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 即代碼,腳本化入庫,自動化生成,持續整合。