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

Sql server 从文本文件更新客户端SQL Server数据库结构,sql-server,database,compare,Sql Server,Database,Compare,我们有一个“主数据库结构”,需要一个例程来保持客户端站点上的数据库结构最新 已经提出了许多建议,但我正在寻找更具体的解决方案,大致如下: 我想生成一个文本文件(XML或其他可读格式),它描述整个数据库结构(这可以进入版本控制)。此例程将在内部运行,以提供一个数据库模式文件,该文件将随产品的下一版本一起分发 然后,我需要一种方法来更新客户端站点上的数据库结构,使其与主数据库结构相对应。(换句话说,我不想为不同版本的数据库结构跟踪大量的更改脚本,而是需要一个更通用的例程,可以将客户机数据库结构更新为

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

已经提出了许多建议,但我正在寻找更具体的解决方案,大致如下:

  • 我想生成一个文本文件(XML或其他可读格式),它描述整个数据库结构(这可以进入版本控制)。此例程将在内部运行,以提供一个数据库模式文件,该文件将随产品的下一版本一起分发
  • 然后,我需要一种方法来更新客户端站点上的数据库结构,使其与主数据库结构相对应。(换句话说,我不想为不同版本的数据库结构跟踪大量的更改脚本,而是需要一个更通用的例程,可以将客户机数据库结构更新为当前的主数据库结构。)
  • 因此,我正在寻找的主要功能可以描述为“数据库结构到文本”和“文本到数据库结构”。有各种不同的工具,可以为您提供模式和存储过程以及两个数据库之间的约束差异。您可以自己开发,但我认为如果您有一个复杂的模式,那么它将比这些工具中的一个更昂贵,许多都会提供免费试用,以便您可以进行测试

    问题是您必须让主数据库联机才能这样做,并且可以从客户端数据库安装(或安装在那里)访问主数据库,这可能可行,也可能不可行

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


    您喜欢的比较文本路径(比较两种模式的文本SQL转储)在我看来很难做到正确和自动,看起来不像是正确的路径。

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

    • 将表添加到数据库:
      创建表发布
      (发布号int不为空,
      应用的日期时间不为空
      )
    • 作为发布脚本的一部分,每个发布都会在此表中插入一行
    • 现在,您可以通过一个查询找出每个客户机正在运行的版本,并运行该版本和它们希望运行的版本之间的所有版本
    • 此外,您可以通过执行以下操作来检查每个版本的模式是否正确(正确的表名、列等):
      选择so.name,
      sc.name
      从sysobjects so,
      syscolumns sc
      其中type='U'
      按1、2顺序订购
    • 然后计算结果的散列,并将其与预先计算的散列(通过在参考安装上运行查询生成)进行比较,以查看安装是否正确
    缺少一个步骤-将现有数据迁移到新架构。