【问题标题】:SQL Server Database schema versioning and updateSQL Server 数据库架构版本控制和更新
【发布时间】:2009-12-02 15:31:57
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我使用数据库扩展属性,见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
    

    【讨论】:

      【解决方案2】:

      贴上一个版本表,它简单、有效,而且过去,嗯,嗯,它已经为我工作了 10 多年。

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-11-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多