2009-12-02 68 views
3

对于我的应用程序,我必须支持更新方案,并且数据库可能会受到影响。SQL Server数据库模式版本控制和更新

我希望能够在不安装中间版本的情况下从旧版本升级到最新版本。例如。假设我有版本A(最旧),B(中间)和C(新版本)。我希望能够将版本A直接更新到版本C.对于应用程序文件,这很简单,我只是用新版本替换旧版本。但是对于数据库,我不希望生成SQL脚本以将数据库架构从A直接更改为C,而是希望先应用脚本将架构从A更改为B,将B更改为C.

我可以存储SQL Server数据库的数据库版本吗?有没有可以设置的特殊属性,而不是实现版本表?在我的代码(.NET)中,我想读取数据库版本,并相应地按照正确的顺序执行更新SQL脚本。

我将使用您的SQL Server版本都的SQL Server 2005和SQL Server 2008

回答

7

我用数据库的扩展属性,看Version Control and your Database

SELECT [value] 
    from ::fn_listextendedproperty (
     'MyApplication DB Version', 
     default, default, default, default, default, default); 

...

EXEC sp_updateextendedproperty 
    @name = N'MyApplication DB Version', @value = '1.2'; 
GO 
+1

酷 – Murph 2009-12-02 19:11:34

2

这取决于你使用。

我不相信数据库版本是数据库的内置属性,但是您可以使用扩展属性。

就我个人而言,我会创建自己的版本表,因为这可以让您将更多元数据与它关联。

3

坚持一个版本表,其简单,有效,过去,呃,以及它超过10年它为我工作的一种享受。

我在响应写这个了另一个问题here

0

您可以添加一个表,注册当前版本。然后运行所有升级脚本,但应该以这样的方式编写脚本,即如果当前版本高于脚本预期的版本,则脚本不会执行。

这样,数据库模式的当前版本是什么都没有关系。脚本只会做出对模式尚未做出的更改。

在这里你可以找到一些存储过程显著减少工作量写作升级脚本:(!学到新的东西)How to Maintain SQL Server Database Schema Version