2009-01-16 75 views
11

我需要將版本放到SQL Server 2005數據庫中,並且可以從.NET應用程序訪問這些版本。我在想的是在數據庫上使用名爲「版本」的擴展屬性,當然這個值將是數據庫的版本。然後我可以使用SQL來解決這個問題。我的問題是,這聽起來像是一個很好的計劃,還是有更好的方式將版本添加到SQL Server數據庫?如何版本SQL Server數據庫?

讓我們假設我無法使用表來保存元數據。

+0

你的意思版本的模式,或者其中包含的數據嗎? – cdeszaq 2009-01-16 20:29:52

+0

對模式進行版本控制 – widmayer 2009-01-16 20:34:51

回答

2

如果我理解你的問題是正確的(區分內部數據庫版本,比如應用程序內部版本號),那麼你可以使用某種SYSVERSION表來保存帶有這些信息的單行數據。

更容易查詢。

還可能包含多列有用信息,或多行代表數據庫副本升級後的不同時間。

更新:那麼,如果你不能使用一個表來保存元數據,那麼某種外部信息(硬盤上的INFO文件?)或擴展屬性是要走的路。

我仍然喜歡桌子的想法,雖然:)你總是可以使用安全性,只有通過自定義存儲的proc get_db_version或其他東西才能訪問安全性。

+0

由於體系結構策略等原因,我正在尋找此方法的替代方案。 – widmayer 2009-01-16 20:33:36

11

我這樣做:

創建一個架構表:

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上閱讀

+0

這可能會更進一步,併爲模式保留元數據,例如表,字段,類型等。 ,然而,開始適合於一個動態的系統,其中部分程序的數據是模式本身,在醫療行業中經常見到。 – cdeszaq 2009-01-16 20:55:41

6

我們使用擴展屬性來描述它,它工作得很好。

我認爲有一張桌子是矯枉過正的。如果我想跟蹤數據庫中的差異,則使用源代碼管理並將所有數據庫生成腳本保存在其中。

我也使用了一些ER圖工具來幫助我跟蹤數據庫版本的變化。這在實際應用程序之外,但它讓我很快看到了什麼變化。

我認爲這是CASEStudio或類似的東西。

0

要做的最好的方法是有2個過程:一個頭控制插入的內容,並驗證頁腳插入數據,如果釋放良好與否。正文將包含您的腳本。

您需要一個封裝器來封裝您的腳本並記錄所有信息:到目前爲止,釋放,腳本編號已應用,applyby,applydate日期,釋放結果「失敗或成功」。

0

我正在使用類似於Matt的解決方案的專用表。除此之外,數據庫更改必須在對模式應用任何更改之前檢查當前版本。如果當前版本小於預期,則腳本以致命錯誤終止。如果當前版本比預期的大,則腳本跳過當前步驟,因爲該步驟有時在過去已經執行。

下面是一個例子,並約定在編寫數據庫修改腳本,完整的解決方案:How to Maintain SQL Server Database Schema Version

相關問題