【问题标题】:Programatically find and apply schema differences on SQL Server以编程方式在 SQL Server 上查找和应用架构差异
【发布时间】:2013-05-08 12:16:18
【问题描述】:

我目前正在创作的产品依赖于 SQL Server 作为后端。我试图解决的一个问题是改进“升级”故事。所以 v1 将有一个特定的模式,而 v2 可能包括对这个模式的一些增强(新表和新列)。

我知道 RedGate 和 ApexSQL 的 SDK - 但想避免。

我已经阅读了 SMO 文档,但我是新手,正在努力查看这是否可以应用于这种情况。理想情况下,我希望这个程序化(SMO 或其他) - 基本案例看起来很简单,但如果我能提供帮助,我真的不想重新发明轮子。有没有人有类似要求的经验或关于我如何处理的想法?

【问题讨论】:

    标签: c# sql schema diff smo


    【解决方案1】:

    您没有说您使用的是什么版本的 SQL Server,但在(我认为)2005 年及以后,存在数据库触发器的概念。这些工作类似于它们的表级表亲,但可用于跟踪数据库上发生的任何类型的 DDL 更改。我们并没有使用它来实际生成 DDL——更多的是用来跟踪表格格式何时发生变化。虽然我认为你所追求的应该是可能的。

    触发器是区分开发人员的因素之一。有些人认为它们是自切片面包以来最好的东西,而另一些人则非常讨厌它们。也许是因为当数据发生变化时,这些是你最不想想到的。

    【讨论】:

    • 您描述的方法很有趣,我过去曾使用过触发器,我对它们很好 我意识到我没有指定我使用的是 EF,所以我不确定如果它适用于我的情况 - 如果至少对类似情况有用。
    • 这很有趣。如果我冒险猜测,我怀疑 EF 会以与您在 SSMS GUI 中进行更改时类似的方式生成 DDL。不过,我不会赌我的房子... :)
    【解决方案2】:

    也许不完全是您正在寻找的东西(因为它不是 SMO),但看看 Entity Framework Code First Migrations 可能会对您有所帮助:

    http://msdn.microsoft.com/en-us/data/jj591621

    模型类中的更改可以进行版本控制,并且可以直接应用于数据库,或者,如果您无法直接访问您的数据库,您可以为您的新版本生成 SQL 代码并将其交给您的数据库-管理员。

    【讨论】:

    • 我使用的是 EF Code First - 所以会检查 CF 迁移 - 感谢您提供链接。
    【解决方案3】:

    我使用 Visual Studio 中的数据库项目来管理模式的版本控制。在数据库项目中创建基线后,您可以在项目中进行更改,然后使用 Schema Compare 创建 SQL 脚本以将更改应用到不同的环境中。

    我建议只进行附加更改,但它会为破坏性更改生成更改脚本。如果您没有同步您的环境,我强烈建议您为每个环境生成一个新脚本。

    这篇博文介绍了如何在 Visual Studio 2012 中创建一个:http://candordeveloper.com/2013/01/08/creating-a-sql-server-database-project-in-visual-studio-2012/

    Red Gate 也有架构比较产品,但我没有真正使用过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-31
      • 1970-01-01
      • 2010-12-18
      • 2010-10-07
      • 1970-01-01
      • 2016-10-21
      相关资源
      最近更新 更多