我在兩個表中有一些父/子數據。我需要將父行復制回父表中,但也要將子行復製爲創建的新行的子行。 我一直在搜索這個網站和谷歌,但只能找到來自甲骨文的例子或使用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假設,這給了'源'中的列的別名,但在這種情況下不需要(查詢沒有它)? – EvilDr
你說得對,在這種情況下你不需要別名。 – TomT