2015-10-19 3 views
1

Я пытаюсь создать тестовые данные для таблицы с уникальным идентификатором, а также подтаблицу с внешним ключом, которая ссылается на этот уникальный идентификатор.Дилемма копирования TSQL с 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 

Как бы я знать, как ссылаться вновь создать UniqueIdentifier для использования в таблице югу в качестве внешнего ключа.

+0

Опубликовать свои структуры таблиц. Я не могу представить, что так сложно в отношении вашего требования. –

+0

@TabAlleman обновил вопрос. – wellmannered

ответ

1

Вставка новых значений с помощью переменной помощника, чтобы держать генерироваться 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; 

Копирование данных из одной таблицы в другую:

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; 

РЕДАКТИРОВАТЬ:

Пример вставив данных с использованием join и временную таблицу, а затем вставлять определенные столбцы в таблицы.

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; 
+0

Я понимаю, используя вспомогательную переменную, но как я могу использовать ту же идею для всей таблицы с 10 или 100 элементами записей? как только будет сделан первый экземпляр, он попытается вставить хранилище uniqueidentifier @new_guid и сбой, потому что он не будет уникальным. Спасибо за помощь! – wellmannered

+0

@wellmannered 'INSERT INTO main VALUES ('guid_1'), ('guid_2'), (guid_3)' и 'INSERT INTO sub VALUES ('abc', 'guid_1'), ('efg', 'guid_2'), ('hij', 'guid_3') '; – lad2025

+0

, так что нет способа с этим методом автоматизировать это, таблица, в которой я работаю, содержит 100 записей? – wellmannered

Смежные вопросы