我需要將版本放到SQL Server 2005數據庫中,並且可以從.NET應用程序訪問這些版本。我在想的是在數據庫上使用名爲「版本」的擴展屬性,當然這個值將是數據庫的版本。然後我可以使用SQL來解決這個問題。我的問題是,這聽起來像是一個很好的計劃,還是有更好的方式將版本添加到SQL Server數據庫?如何版本SQL Server數據庫?
讓我們假設我無法使用表來保存元數據。
我需要將版本放到SQL Server 2005數據庫中,並且可以從.NET應用程序訪問這些版本。我在想的是在數據庫上使用名爲「版本」的擴展屬性,當然這個值將是數據庫的版本。然後我可以使用SQL來解決這個問題。我的問題是,這聽起來像是一個很好的計劃,還是有更好的方式將版本添加到SQL Server數據庫?如何版本SQL Server數據庫?
讓我們假設我無法使用表來保存元數據。
如果我理解你的問題是正確的(區分內部數據庫版本,比如應用程序內部版本號),那麼你可以使用某種SYSVERSION表來保存帶有這些信息的單行數據。
更容易查詢。
還可能包含多列有用信息,或多行代表數據庫副本升級後的不同時間。
更新:那麼,如果你不能使用一個表來保存元數據,那麼某種外部信息(硬盤上的INFO文件?)或擴展屬性是要走的路。
我仍然喜歡桌子的想法,雖然:)你總是可以使用安全性,只有通過自定義存儲的proc get_db_version或其他東西才能訪問安全性。
由於體系結構策略等原因,我正在尋找此方法的替代方案。 – widmayer 2009-01-16 20:33:36
我這樣做:
創建一個架構表:
CREATE TABLE [dbo].[SchemaVersion](
[Major] [int] NOT NULL,
[Minor] [int] NOT NULL,
[Build] [int] NOT NULL,
[Revision] [int] NOT NULL,
[Applied] [datetime] NOT NULL,
[Comment] [text] NULL)
更新模式:
INSERT INTO SchemaVersion(Major, Minor, Build, Revision, Applied, Comment)
VALUES (1, 9, 1, 0, getdate(), 'Add Table to track pay status')
獲取數據庫架構版本:
SELECT TOP 1 Major, Minor, Build from SchemaVersion
ORDER BY Major DESC, Minor DESC, Build DESC, Revision DESC
摘自我在0123上閱讀
這可能會更進一步,併爲模式保留元數據,例如表,字段,類型等。 ,然而,開始適合於一個動態的系統,其中部分程序的數據是模式本身,在醫療行業中經常見到。 – cdeszaq 2009-01-16 20:55:41
我們使用擴展屬性來描述它,它工作得很好。
我認爲有一張桌子是矯枉過正的。如果我想跟蹤數據庫中的差異,則使用源代碼管理並將所有數據庫生成腳本保存在其中。
我也使用了一些ER圖工具來幫助我跟蹤數據庫版本的變化。這在實際應用程序之外,但它讓我很快看到了什麼變化。
我認爲這是CASEStudio或類似的東西。
要做的最好的方法是有2個過程:一個頭控制插入的內容,並驗證頁腳插入數據,如果釋放良好與否。正文將包含您的腳本。
您需要一個封裝器來封裝您的腳本並記錄所有信息:到目前爲止,釋放,腳本編號已應用,applyby,applydate日期,釋放結果「失敗或成功」。
我正在使用類似於Matt的解決方案的專用表。除此之外,數據庫更改必須在對模式應用任何更改之前檢查當前版本。如果當前版本小於預期,則腳本以致命錯誤終止。如果當前版本比預期的大,則腳本跳過當前步驟,因爲該步驟有時在過去已經執行。
下面是一個例子,並約定在編寫數據庫修改腳本,完整的解決方案:How to Maintain SQL Server Database Schema Version
你的意思版本的模式,或者其中包含的數據嗎? – cdeszaq 2009-01-16 20:29:52
對模式進行版本控制 – widmayer 2009-01-16 20:34:51