【问题标题】:How do I version a SQL Server Database?如何对 SQL Server 数据库进行版本控制?
【发布时间】:2010-10-01 21:35:09
【问题描述】:

我需要将版本放到 SQL Server 2005 数据库中,并从 .NET 应用程序中访问这些版本。我在想的是在数据库上使用名称为“版本”的扩展属性,当然该值将是数据库的版本。然后我可以使用 SQL 来解决这个问题。我的问题是,这听起来像是一个好计划,还是有更好的方法将版本添加到 SQL Server 数据库?

假设我无法使用表格来保存元数据。

【问题讨论】:

  • 您的意思是对架构或其中包含的数据进行版本控制?

标签: sql-server versioning database-versioning


【解决方案1】:

我这样做:

创建架构表:

CREATE TABLE [dbo].[SchemaVersion](
    [Major] [int] NOT NULL,
    [Minor] [int] NOT NULL,
    [Build] [int] NOT NULL,
    [Revision] [int] NOT NULL,
    [Applied] [datetime] NOT NULL,
    [Comment] [text] NULL)

更新架构:

INSERT INTO SchemaVersion(Major, Minor, Build, Revision, Applied, Comment)
VALUES (1, 9, 1, 0, getdate(), 'Add Table to track pay status')

获取数据库架构版本:

SELECT TOP 1 Major, Minor, Build from SchemaVersion
ORDER BY Major DESC, Minor DESC, Build DESC, Revision DESC

改编自我在 Coding Horror 上读到的内容

【讨论】:

  • 这可以更进一步,并保存模式的元数据,例如表、字段、类型等。然而,这确实开始适用于一个动态系统,其中部分程序数据的一部分是模式本身,在医疗行业中很常见。
【解决方案2】:

我正在使用类似于马特解决方案的专用表。除此之外,数据库更改必须在对模式应用任何更改之前检查当前版本。如果当前版本小于预期,则脚本以致命错误终止。如果当前版本大于预期,则脚本会跳过当前步骤,因为该步骤在过去有时已经执行过。

这是编写数据库更改脚本的示例和约定的完整解决方案:How to Maintain SQL Server Database Schema Version

【讨论】:

    【解决方案3】:

    最好的方法是有两个过程:一个标题来控制插入的内容和验证一个页脚来插入数据,如果发布是好的或不好的。正文将包含您的脚本。

    您需要一个包装器来封装您的脚本并记录所有信息:至于发布,脚本编号已应用,applyby,applydate 日期,发布结果“失败或成功”。

    【讨论】:

      【解决方案4】:

      我们使用您描述的扩展属性,并且效果非常好。

      我认为有一张桌子是多余的。如果我想跟踪我的数据库中的差异,我会使用源代码控制并将所有数据库生成脚本保存在其中。

      我还使用了一些 ER 图表工具来帮助我跟踪数据库版本的变化。这超出了实际应用程序,但它让我可以快速看到发生了什么变化。

      我认为是 CASEStudio 或类似的东西。

      【讨论】:

      【解决方案5】:

      如果我正确理解您的问题(区分内部数据库版本,例如应用程序内部版本号),您可能有某种 SYSVERSION 表,其中包含包含此信息的单行数据。

      更容易查询。

      还可以包含多列有用信息,或代表数据库副本升级的不同时间的多行。

      更新:好吧,如果您不能使用表来保存元数据,那么某种外部信息(硬盘驱动器上的 INFO 文件?)或扩展属性将是路要走。

      不过,我仍然喜欢 table 的想法 :) 您始终可以使用安全性使其仅可通过自定义存储的 proc get_ db_version 或其他方式访问。

      【讨论】:

      • 由于架构策略等原因,我正在寻找此方法的替代方案。
      猜你喜欢
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多