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;
我正在尝试为带有唯一标识符的 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;