2009-01-16 69 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

相关问题