【问题标题】:Compare Data between database project and database比较数据库项目和数据库之间的数据
【发布时间】:2023-03-15 19:50:01
【问题描述】:

所以,我喜欢 SSDT 附带的架构比较选项。我刚开始使用它,它比我用来在开发人员机器上保持数据库架构更新的任何其他方式都高效得多。

但是,我真正需要的是能够比较 DATA。是否有一个版本的数据库项目可以让我包含表数据?这将使设置新的开发人员机器变得更加容易,因为我们可以用正确的数据预先填充一些表,而不必担心单个脚本。

请告诉我我错过了什么,有一个神奇的按钮可以让我做到这一点!

【问题讨论】:

  • 你没有错过一个神奇的按钮。数据库项目并没有真正的“包含数据”选项。您最接近的是使用部署后脚本进行数据插入/更新,而这些脚本不属于比较范围。但是,有 工具可以将适当的插入语句生成到临时表中,然后您可以从那里运行 MERGE 语句。生成初始脚本后,添加新数据应该相对容易,除非您经常更改这些表中的数据。
  • @PeterSchott 您可以在 Code First 迁移之外执行部署后脚本吗?
  • 好吧,您总是可以选择 SQL 脚本并运行它们,但要执行部署前/部署后脚本,我认为您必须查看发布选项,而不是推送其他任何内容。我认为这可以通过打开所有排除选项来实现,但我不会将其设为您的正常发布选项。 .. 我们从来没有进行过代码优先迁移——我们总是首先推送数据库,并尝试确保代码可以与旧对象或新对象一起使用,除非存储过程等的新参数。 .. 可能需要更多详细信息来了解您正在尝试做的事情。
  • 主要是,在我们的数据库中,基本上有一些字典可以驱动下拉列表和类似的东西。当我们启动新的开发人员时,我们必须让他们手动填写或从备份中恢复。如果我们可以在加载模式后进行数据比较,那就太好了。这样,如果我们添加新条目,它们也可以以这种方式加载它们。比跟踪维护脚本更有意义,但显然是不可能的。
  • 您是否查看过部署后脚本?我用 Red-Gate 的工具做了一些类似的事情,将表的数据脚本化到临时表中,然后对临时表和永久表使用 MERGE 语句。它们是大型脚本,但可以工作。或者,对于新数据库,考虑将插入部分短路并在部署/发布选项后使用 BCP。当然,这取决于表的大小。

标签: sql-server database sql-server-data-tools database-project


【解决方案1】:

有一个选项可以比较数据库之间的数据:工具 | Sql 服务器 |新数据比较。 你可以在这里阅读更多:https://msdn.microsoft.com/en-us/library/dn266029(v=vs.103).aspx

SSDT 项目仅用于数据库模式,它不处理数据。当然,您可以将数据作为部署前/部署后脚本包含在内,但它不会被编译,因此您无法进行比较。

【讨论】:

  • 这只能让我在两个数据库之间进行比较。我需要在数据库和数据库项目之间。
  • 对不起,我读得很快。我更新了答案。无法比较项目中的数据。
【解决方案2】:

我最终将 Microsoft.SqlServer.DacFx NuGet 包导入到我的 C# 解决方案中。这基本上让我可以利用 Visual Studio 的 Schema Compare 背后的工具来制作内存中的 DACPAC,然后将其部署到新的数据库名称。

我在 GitHub 上发布了一个非常粗略的使用示例:https://github.com/dsartain18/DACPAC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 2011-06-15
    • 1970-01-01
    相关资源
    最近更新 更多