我在两个表中有一些父/子数据。我需要将父行复制回父表中,但也要将子行复制为创建的新行的子行。 我一直在搜索这个网站和谷歌,但只能找到来自甲骨文的例子或使用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