TSQL 复制困境与 Uniqueidentifier

TSQL Copy Dilemma with Uniqueidentifier

我正在尝试为带有唯一标识符的 table 以及带有引用该唯一标识符的外键的子 table 创建测试数据。

我将如何复制每个 table 中的每一行,同时保持每个引用 table 之间的相同关系。我无法弄清楚如何使用外键从 sub-table 引用新创建的 uniqueidentifier。

谢谢!

MAIN_TABLE

MAIN_ID
1234
5678

SUB_TABLE

SUB_ID    MAIN_ID
abcd      1234
efgh      5678

现在正在为 MAIN_TABLE

复制每个条目中的数据

MAIN_TABLE

MAIN_ID
1234
5678
9123
4567

SUB_TABLE

SUB_ID    MAIN_ID
abcd      1234
efgh      5678
ijkl      9123
mnop      4567

我怎么知道如何引用新创建的唯一标识符作为外键在子 table 中使用。

使用辅助变量插入新值以保存生成的 NEWID:

CREATE TABLE #main(main_id UNIQUEIDENTIFIER PRIMARY KEY);

CREATE TABLE #sub(sub_id VARCHAR(100) PRIMARY KEY,
                  main_id UNIQUEIDENTIFIER FOREIGN KEY REFERENCES #main(main_id)
                  );

DECLARE @new_guid UNIQUEIDENTIFIER = NEWID();

INSERT INTO #main(main_id)
VALUES (@new_guid);

INSERT INTO #sub(sub_id, main_id)
VALUES ('abc', @new_guid);


SELECT *
FROM #main

SELECT *
FROM #sub;

正在将数据从一个 table 复制到另一个:

INSERT INTO #main_new(main_id);
SELECT main_id
FROM #main;

INSERT INTO #sub_new(sub_id, main_id)
SELECT sub_id, main_id
FROM #sub;

编辑:

使用连接和临时 table 重新插入数据然后将特定列插入 table 的示例。

SELECT NEWID() as guid, sub_id, [rn] = ROW_NUMBER() OVER(ORDER BY m.main_id)
INTO #temporary
FROM #main m
JOIN #sub s
  ON m.main_id = s.main_id


INSERT INTO #main
SELECT guid
FROM #temporary;

INSERT INTO #sub
SELECT CONCAT(sub_id, rn), guid
FROM #temporary;

SELECT *
FROM #main;

SELECT *
FROM #sub;