我必须将一个表中的数据合并到另一个表中。这两个表都具有相同的结构,如下所示:
Id (PK*) | Name | ParetnId (FK to PK*, it's a tree)
我正在尝试使用的内容:
我知道有些人临时关闭约束,复制数据并再次限制约束。在我的情况下,我试图避免这种情况。 (许多线程写入这些表,我不知道这些技巧如何影响事务)
问题是:如何在不关闭约束的情况下合并(或仅复制)这些表之间的记录。
答案 0 :(得分:0)
我可以在源表上使用更多信息。我假设它不会有主键列。如果它也没有外键列,那么我假设你可以加入目标表来获取id(如果是,你可以从下面删除AND EXISTS
子句)。唯一的麻烦是你必须多次运行,直到没有更多的插入。
MERGE INTO Target AS T
USING Source AS S
ON S.Name = T.Name
WHEN MATCHED AND EXISTS(
SELECT *
FROM Target
WHERE Id = S.ParentID
) THEN
UPDATE SET
ParentId = S.ParentID
WHEN NOT MATCHED BY TARGET AND EXISTS(
SELECT *
FROM Target
WHERE Id = S.ParentID
) THEN
INSERT VALUES(
S.Name,
S.ParentID
)