SQL Server数据库架构版本控制和更新

时间:2009-12-02 15:31:57

标签: sql-server database-schema database-versioning

对于我的应用程序,我必须支持更新方案,并且数据库可能会受到影响。

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

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

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

5 个答案:

答案 0 :(得分: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 :(得分:3)

坚持使用版本表,简单,有效,而且对于过去,呃,十多年来它一直为我提供了一种享受。

我是在回答另一个问题here

时写的

答案 2 :(得分:2)

这取决于您正在使用的SQL Server版本。

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

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

答案 3 :(得分:0)

您可以添加一个记录当前版本的表。然后运行所有升级脚本,但是如果当前版本高于脚本预期的版本,脚本应该以不执行的方式编写。

通过这种方式,与当前版本的数据库模式无关。脚本只会进行尚未对架构进行的更改。

在这里,您可以找到一些存储过程,可以显着减少编写升级脚本的工作量:How to Maintain SQL Server Database Schema Version

答案 4 :(得分:0)

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

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