SQL 迁移脚本 - 嵌套循环

标签 sql sql-server data-migration

这是场景:

我正在将数据从旧系统迁移到新系统。

旧系统有 2 个表,分别代表评论及其回复。

新系统有一个注释表,允许嵌套注释。因此,它有一个自引用外键。

我需要将数据从 2 个表移至 1 个表中。

问题是这样的: 虽然我知道哪些子评论与哪些父评论相关,但在插入新表时,我不知道父评论的新 ID。

我考虑过使用 while 循环来遍历每个父注释,然后在循环内执行 2 次插入。

现在是使用光标的合适时机吗?根据几乎所有人的建议,我像躲避瘟疫一样避开它们。

您能想出一种不同的方法将数据从 2 个表移至 1 个表吗?

所有这些都发生在另一个 while 循环内。我还想知道是否应该尝试将此循环分解为一个单独的循环而不是嵌套它们。

最佳答案

如果我面前没有测试数据库,您可以使用MSSQL中的OUTPUT关键字来完成。应该足以让您开始:

DECLARE @NewIDs Table
(
  NewID INT,
  OldID INT
)

INSERT INTO NewTable
OUTPUT NewTable.ID,
       OldTable.ID
INTO   @NewIDs
SELECT NULL As ParentCommentID, Othercolumns
FROM   OldParentTable

INSERT INTO NewTable
SELECT NewID As ParentCommentID, OtherColumns
FROM   OldChildTable
JOIN   @NewIDs NewIDs
    ON NewIDs.OldID = OldChildTable.OldParentTableID

关于SQL 迁移脚本 - 嵌套循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19991789/

相关文章:

php - 查找相同的表行

sql - 获取上一年的第一个日期

ruby-on-rails - 如何(以及是否)使用初始数据填充 Rails 应用程序

sql - 如何使用 postgres 限制 SUM

mysql - 使用外键同时选择多个内容

c# - csv 导入 sqlserver 没有重复使用 c#

java - 使用 Java 将 Oracle 数据库迁移到 MS Access 的最佳方法是什么?

mysql - 我可以将数据从一对多关系迁移到 mysql 中的 json 对象列吗?

php - 当存在索引问题时,查询/准备语句中未使用索引

c# - 每个月有两个日期的日子