SQL Server 数据库模式版本控制和更新

3

针对我的应用程序,我必须支持更新场景,而数据库可能会受到影响。

我希望能够从旧版本直接升级到最新版本,而无需安装中间版本。例如,假设我有版本A(最旧的版本)、B(中间版本)和C(新版本)。我希望能够将版本A直接升级到版本C。对于应用程序文件来说,这很简单,我只需要用新文件替换旧文件。但是对于数据库,我不希望生成一个SQL脚本来改变从A到C的数据库架构,而是想先应用一个脚本将架构从A更改为B,再从B更改为C。

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

我将使用SQL Server 2005和SQL Server 2008。

5个回答

7

我使用数据库扩展属性,参见版本控制和你的数据库

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

3
在内容中加入一个版本表格,它简单易行且有效。在过去的10年里,对我而言一直非常实用。我是为回答另一个问题这里而写下这篇文章的。

2
这取决于您使用的SQL Server版本。我不认为数据库版本是数据库的内置属性,但是您可能可以使用扩展属性。个人建议创建自己的版本表,因为这将允许您将更多元数据与其关联。

0

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

通过这种方式,数据库模式的当前版本是无关紧要的。脚本将仅对尚未对模式进行更改的内容进行更改。

在此处,您可以找到一些存储过程,它们显着减少了编写升级脚本的工作量:如何维护SQL Server数据库模式版本


0

我更喜欢使用普通的SQL查询来进行SQL模式迁移,而不是EF代码优先,但如果您没有数据库版本控制,这并不容易。如果您使用.NET,有一个免费的NuGet包可以控制您的数据库版本,并且它可以与普通的SQL查询一起使用。

https://www.nuget.org/packages/SQLMigrationByQuery


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接