3

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

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

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

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

4

5 回答 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
于 2009-12-02T16:34:07.230 回答
3

贴上一个版本表,它简单、有效,而且在过去,嗯,10 多年来它对我来说是一种享受。

我写这个是为了回答另一个问题here

于 2009-12-02T15:49:21.357 回答
2

This depends on your version of SQL Server you're using.

I don't believe a database version is a built in property of a database, however you can probably use an extended property.

Personally, I'd create my own version table, as this will allow you to associate more metadata with it.

于 2009-12-02T15:44:15.487 回答
0

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

这样,数据库模式的当前版本是什么无关紧要。脚本只会对架构进行尚未进行的更改。

在这里您可以找到一些显着减少编写升级脚本工作量的存储过程:如何维护 SQL Server 数据库架构版本

于 2013-10-24T11:18:20.463 回答
0

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

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

于 2020-08-20T20:16:21.173 回答