我對當前數據庫有相當舊的應用程序(在MSSQL上,但沒關係)。我用所有需要的靜態數據完全腳本化。現在我只想通過更新腳本介紹數據庫更改。因此,每個函數,每個SP將被放置在獨立文件中,並且所有模式更新腳本將被存儲在名爲'SomeProduct01_0001'
的文件中。這意味着此腳本屬於產品SomeProduct,sprint 1並且它是第一個模式更新腳本。實現SQL腳本的常見做法應用程序
我知道,每個腳本必須絕對重新運行的,但無論如何,我想擁有的功能對這些腳本組合成一個基於數據庫版本(存儲在數據庫表)。
- 什麼常見的最佳做法是處理一串更新腳本?
- 什麼是更好的 - 在收集器中實現版本anylyzis (
bat
或exe
文件)或者爲每個文件添加一些SQL頭?從其他角度來看,我已經有了版本 - 它將包含sprint標識符和腳本標識符,不確定是否可以在腳本標題中複製此信息。 - 如何跳過文件內容如果用戶試圖將其應用到較新的數據庫,但保持 可用性結合此腳本與任何其他執行更新 其他舊數據庫?
- 如何避免數據庫衝突,如果合併腳本運行列/仍然不在數據庫存在,但將在BYT這個腳本創建(例如,在第10行的表創建,並在第60行是在觸發或者限制使用的表,因爲我知道腳本不會被驗證)?也許包裝在
EXEC('')
整個腳本?除了單引號字符之外,我還需要什麼?
UPD:正如David坦澤asnwered最好是用現成的解決方案爲DB遷移,所以它可能是像我這樣的情況下,最好的解決辦法。這不是,也不是我的問題的答案,但它適用於新的解決方案。
查看Liquibase或Flyway工具 –
@a_horse_with_no_name謝謝,非常有趣的遷移工具。據我瞭解,它主要面向開發環境。我找不到任何關於使用這些工具創建交付包的提示。 –