从文本文件更新客户端SQL Server数据库结构

时间:2008-10-07 09:24:42

标签: sql-server database compare

我们有一个“主数据库结构”,需要一个例程来保持客户端站点上的数据库结构是最新的。

我已经提出了一些建议to a related question,但我正在寻找一个更具体的解决方案:

  1. 我想生成一个描述整个数据库结构的文本文件(XML或其他可读格式)(这可以进入版本控制)。此例程将在内部运行,以提供与下一版本的产品一起分发的数据库模式文件。
  2. 然后我需要一种方法来更新客户端站点上的数据库结构,以便它对应于主数据库结构。 (换句话说,我不想跟踪不同版本的数据库结构的大量更改脚本,但是更通用的例程可以将客户端数据库结构更新为当前的主数据库结构。)
  3. 因此,我正在寻找的主要功能可以被描述为“数据库结构到文本”和“文本到数据库结构”。

2 个答案:

答案 0 :(得分:1)

diff工具的 a whole lot 可以为您提供两个数据库之间的架构和存储过程以及约束差异。你可以推出自己的,但我认为如果你有一个复杂的架构,它会比这些工具更昂贵,许多提供免费试用,你可以测试。

问题是你必须让master数据库在线才能这样做,并且可以从客户端数据库安装(或安装在那里)访问,这可能是也可能是不可行的。

如果你不这样做,我能想到的唯一其他理智选择是使用迁移的想法,保留一个SQL脚本+版本对的列表,以及每个数据库的当前版本。这可以通过一个不同的工具进行整合,该工具可以从客户端的数据库版本号和更改列表生成单个脚本。如果您没有更改列表,则可以从diff工具运行开始,并从那里跟踪它们。

比较文本路径(比较两种模式的文本SQL转储)看起来很难直接对我自己做,看起来不是正确的路径。

答案 1 :(得分:1)

几种流行的策略是这种变体:

  • 将表添加到数据库中:
      创建表释放
      (release_number int not null,
       申请日期时间不为空   )
  • 每个版本作为其发布脚本的一部分在此表中插入一行。
  • 您现在可以通过单个查询找出每个客户端正在运行的版本,并运行该客户端之间的所有版本以及它们希望运行的版本。
  • 此外,您可以通过以下方式 检查每个版本(正确的表名,列等)的架构是否正确:
      选择so.name,
             sc.name
      从sysobjects那里,
             syscolumns sc
      WHERE type ='U'
      ORDER BY 1,2
  • 然后计算结果的哈希值并将其与预先计算的哈希值(通过在引用安装上运行查询生成)进行比较,以查看安装现在是否正确。