簡體   English   中英

使用軟件更新更新SQL Server數據庫架構

[英]Update SQL Server Database Schema with software update

安裝產品更新時如何更新SQL服務器數據庫? 是否有任何工具可以與Windows安裝程序集成? 我的典型架構更改是:

  • 添加/刪除列
  • 添加/刪除表。
  • 添加視圖。
  • 添加/更改索引。

根據我的經驗,當您的軟件連接到數據庫時,而不是在安裝時,最好進行數據庫模式更新。 你想做以下事情:

  • 使用唯一標識符(例如guid)標識每個架構更改
  • 包括可以對產品應用的所有更改的列表,例如在構建期間編譯到資源中
  • 在數據庫中有一個表,用於保存已應用的架構更改列表
  • 連接到數據庫時,掃描該表以查看是否需要進行任何更改

這在您的運行代碼中非常簡單,但在安裝程序中卻不那么容易。

Adam Cogan建議創建一個補丁表,用於記錄初始版本之外的每個更新。 不要通過SSMS或企業管理器更改架構,而是確保編寫每個更改的腳本...兩個應用程序都允許您編寫更改腳本,然后不應用它們。 將腳本保存到文件(可能將它們添加為資源),然后在每次應用程序運行時檢查補丁表。

Adam在這里有一些更好的SQL數據庫規則

http://www.ssw.com.au/ssw/Standards/Rules/RulesToBetterSQLServerDatabases.aspx

不確定與Windows安裝程序的集成,但您可能會查看Red Gate的SQL Packager

InstallShield允許您在安裝過程中執行SQL腳本。 雖然沒試過,但是記得上次我看過它時是在GUI上!

您可能想要了解SubSonic的遷移 首先,這是對數據庫進行版本控制的好方法。 其次,要弄清楚如何從安裝程序運行完全相同的腳本應該不會太難。

我認為你的每個版本的軟件都有一堆數據庫更新。 為什么不將這些更新作為T-SQL指令編寫,以便在首次啟動新版軟件時進行測試執行? 只需打開軟件與數據庫的連接,然后發送DDL指令,就像發送任何SELECT或UPDATE指令一樣。 我也會做類似於Jack Paulsen的建議:用雙識別系統維護這些T-SQL指令的列表:一個鏈接到它應用的數據庫/軟件版本(可以是uniqueIdentifier),另一個(數字)到按順序保存指令(參見我的示例:指令2在指令1之前不能執行)

例:

//instruction 1, batch instructions for version#2.162
USE myDatabase
GO
ALTER TABLE myTable
    ADD myColumn uniqueIdentifier Null
GO
//instruction 2, batch instructions for version#2.162
USE myDatabase
ALTER TABLE myTable
    ADD CONSTRAINT myTable_myColumn FOREIGN KEY (myColumn) ...
GO

有關ALTER,DROP和CREATE指令的完整說明,請參閱T-SQL幫助。 在刪除該字段之前,請小心(例如)刪除鏈接到字段的索引和約束。

您當然可以添加一些額外的UPDATE指令來計算添加列的值等。

您甚至可以考慮更復雜的事情,檢查先前的升級步驟(導致數據庫版本#2.161)是否正確執行。

我的建議:在編寫這些T-SQL指令時,還要跟蹤它們的“對應”,以便您可以隨時(例如調試時間)將數據庫結構降級到以前的版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM