У меня есть данные родительского/дочернего на двух таблицах. Мне нужно скопировать родительские строки обратно в родительскую таблицу, но затем также скопировать дочерние строки в виде дочерних строк созданных новых строк. Я искал этот сайт и Google, но могу найти примеры из Oracle или использовать XML (или иметь много предупреждений о ненадежности), поэтому размещаем здесь полное решение для простого обращения к обратному адресу.Повторяющиеся данные родителя/ребенка
Возьмите следующий код (SqlFiddle):
DECLARE @tbl_person TABLE
(
ID int IDENTITY(1,1),
person nvarchar(20)
);
DECLARE @tbl_drinks TABLE
(
ID int IDENTITY(1,1),
personID int,
drink nvarchar(20)
);
DECLARE @i int;
INSERT INTO @tbl_person (person) VALUES ('Bob');
SET @i = SCOPE_IDENTITY();
INSERT INTO @tbl_drinks (personID, drink) VALUES (@i, 'Beer');
INSERT INTO @tbl_person (person) VALUES ('Wendy');
SET @i = SCOPE_IDENTITY();
INSERT INTO @tbl_drinks (personID, drink) VALUES (@i, 'Champage');
INSERT INTO @tbl_drinks (personID, drink) VALUES (@i, 'Water');
INSERT INTO @tbl_person (person) VALUES ('Mike');
SET @i = SCOPE_IDENTITY();
INSERT INTO @tbl_drinks (personID, drink) VALUES (@i, 'Beer');
INSERT INTO @tbl_drinks (personID, drink) VALUES (@i, 'Lemonade');
SELECT * FROM @tbl_person;
SELECT * FROM @tbl_drinks;
Это производит этот выход:
ID person
----------- --------------------
1 Bob
2 Wendy
3 Mike
ID personID drink
----------- ----------- --------------------
1 1 Beer
2 2 Champage
3 2 Water
4 3 Beer
5 3 Lemonade
Я знаю, как легко дублировать ни одного человека, плюс свои напитки, но не несколько человек. Предполагая, что мне нужно, чтобы дублировать Боб и Венди мне нужно, чтобы добраться до этого выхода:
ID person
----------- --------------------
1 Bob
2 Wendy
3 Mike
4 Bob
5 Wendy
ID personID drink
----------- ----------- --------------------
1 1 Beer
2 2 Champage
3 2 Water
4 3 Beer
5 3 Lemonade
6 4 Beer
7 5 Champagne
8 5 Water
Я не могу понять, как сравнивать старые и новые столбцы родительского ID для того, чтобы получить дочерние данные.
Что такое цель ') в качестве источника (ID, человек)' вместо '), как source'. Я полагаю, что при чтении MSDN это дает имя псевдонима для столбцов в 'source', но в этом случае не понадобится (запрос работает без него)? – EvilDr
Вы правы, в этом случае вам не нужны псевдонимы. – TomT