如何对SQL Server数据库进行版本控制?

wid*_*yer 12 sql-server versioning database-versioning

我需要将版本放到SQL Server 2005数据库上,并从.NET应用程序中访问它们.我在想的是在数据库上使用名为"version"的扩展属性,当然值将是数据库的版本.然后,我可以使用SQL来实现此目的.我的问题是这听起来像一个好的计划还是有更好的方法将版本添加到SQL Server数据库?

让我们假设我无法使用表来保存元数据.

Mat*_*ell 12

我这样做:

创建架构表:

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)
Run Code Online (Sandbox Code Playgroud)

更新架构:

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

获取数据库架构版本:

SELECT TOP 1 Major, Minor, Build from SchemaVersion
ORDER BY Major DESC, Minor DESC, Build DESC, Revision DESC
Run Code Online (Sandbox Code Playgroud)

改编自我对Coding Horror的看法


小智 6

我们按照您的描述使用扩展属性,它的效果非常好.

我认为拥有一张桌子有点矫枉过正.如果我想跟踪数据库中的差异,我使用源代码控制并将所有数据库生成脚本保留在其中.

我还使用了一些ER图工具来帮助我跟踪数据库版本的变化.这不在实际应用程序之内,但它允许我快速查看更改的内容.

我认为这是CASEStudio,或类似的东西.


Bra*_*adC 2

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

更方便查询。

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

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

不过,我仍然喜欢表的想法:)您始终可以使用安全性来使其只能通过自定义存储过程 get_ db_version 或其他东西来访问。