【问题标题】:Tool To Generate Data Migration Script From Table A To Table B In SQL Server在 SQL Server 中生成从表 A 到表 B 的数据迁移脚本的工具
【发布时间】:2017-07-13 09:53:22
【问题描述】:

在我们的 SQL Server 数据库部署期间,我们创建了一个临时表,其中包含特定表所需的新数据状态。然后我们将临时表合并到目标表中(我们实际上使用了单独的插入、更新和删除语句,但这可能不相关)。执行的插入/更新/删除被捕获并写入日志。

我们希望能够报告部署将应用哪些更改,而无需实际应用它们。目前这是通过在上述过程结束时回滚事务来完成的。不过这感觉不是特别好。

现在我们想做的是,我们将为表生成一个迁移脚本(生成一些执行必要的插入、更新和删除的 SQL 代码),而不是执行更改并将它们回滚。如果我们想做实际的部署,这段代码将被动态执行。如果没有,代码只会打印到日志中。

将一些可以为两个指定表生成迁移脚本的代码放在一起应该不会花很长时间,但我首先想验证是否已经没有可以执行此操作的现有工具?

在 Google 上搜索,我可以找到很多关于迁移整个数据库的讨论,但没有关于生成数据迁移脚本以有效地将一个表合并到另一个表。

所以我的问题是,有人知道这样的工具吗?

【问题讨论】:

  • 您选择了什么解决方案?如果您正在使用插入、更新和删除语句,您不能在执行之前保存该脚本吗,因为这实际上是已应用内容的记录?
  • @DavidAtkinson 我们现在所做的与您所描述的相似。我们根据源和目标之间的连接选择一个 Actions_Planned 表变量,包括目标表中的所有现有值和源表中的新值。然后,我们从这个表变量中打印出计划的操作,包括旧的和新的列值。然后,如果我们想要实际执行更改,而不是将源表和目标表连接起来,我们将 Actions_Planned 表连接到目标表,并准确执行我们说要执行的操作。
  • 我们还使用 OUTPUT 子句来填充 Actions_Performed 表变量,然后可以使用该变量来打印实际所做的更改。我们使用 Actions_Planned 表而不是源表来驱动更改的原因是,我们不会重复确定是否插入/更新/删除/什么都不做的逻辑,因此消除了报告一件事的风险和做别的事。
  • 感谢分享。了解如何以不同方式解决问题总是很有趣!

标签: sql-server database tsql


【解决方案1】:

有几种数据比较工具,例如:

  • Red Gate 的 SQL 数据比较
  • SQL Server 数据工具
  • 来自 Devart 的 dbForge 数据比较

这就是你要找的吗?

【讨论】:

  • 谢谢。理想情况下,我正在寻找可以在 SQL 脚本中调用的存储过程之类的东西。因此,我们可以保留大部分现有流程,在其中创建一个包含所需状态的临时表,然后使用一个过程自动生成迁移脚本。不过,RedGate SQL 数据比较看起来确实很有趣,SSDT 中的数据比较工具也是如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
  • 2020-04-09
  • 2016-05-12
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
相关资源
最近更新 更多