Sql server 2008 使用条件将行从目标表复制到源表
考虑以下两个表:Sql server 2008 使用条件将行从目标表复制到源表,sql-server-2008,Sql Server 2008,考虑以下两个表: Parent Table ------------ Parentid 1 2 3 4 5 6 Child Table ----------- Id ParentId Values 1 1 val1 2 2 val2 3 3 val3 现在,我想向parentid为4,5,6的子表中插入记录,其中包含parentid为1,2,3的所有值。所以子表应该如下所示 Id ParentId Value
Parent Table
------------
Parentid
1
2
3
4
5
6
Child Table
-----------
Id ParentId Values
1 1 val1
2 2 val2
3 3 val3
现在,我想向parentid为4,5,6的子表中插入记录,其中包含parentid为1,2,3的所有值。所以子表应该如下所示
Id ParentId Values
1 1 Val1
2 2 Val2
3 3 Val3
4 4 Val1
5 5 Val2
6 6 Val3
请为我的场景共享SQL查询。我使用的是SQLServer2008,所以请让我知道任何高级查询
注意:在我的真实场景中,我有更多的记录。所以我不想在insert语句中硬编码任何值
提前谢谢 我希望您正在寻找这样的产品
Declare @maxPID INT = (SELECT MAX(ParentId) from child)
DECLARE @count int= 1
DECLARE @pID INT
SET @pID = @maxPID
WHILE @count <= @maxPID
BEGIN
SET @pID = @pID + 1
INSERT INTO child
Values (@pID, (SELECT TOP 1 Value from Child where parentId = @count))
set @count = @count+1
END
这是它的sql小提琴是的,我理解。在我的真实场景中,我需要以这种方式插入记录。
DECLARE @Parent TABLE (pid INT);
DECLARE @Child TABLE (cid INT,pid INT, value varchar(50));
INSERT INTO @Parent
VALUES (1),
(2),
(3),
(4),
(5),
(6)
INSERT INTO @Child
VALUES (1,1,'a'),
(2,2,'b')
;WITH ChildValues AS
(
SELECT value,
ROW_NUMBER() OVER(ORDER BY RandonIDs ASC) RN
FROM (
SELECT RAND() RandonIDs,
value
FROM @Child
UNION ALL
SELECT RAND(),
value
FROM @Child
)
)
,MissingParentIDs AS
(
SELECT Pid,
ROW_NUMBER() OVER(ORDER BY Pid ASC) RN
FROM @Parent P
WHERE NOT EXISTS (SELECT C.Pid
FROM @Child C
WHERE C.Pid = P.Pid)
)
SELECT Pid,
Value
--INTO Destination Table
FROM MissingParentIDs M
INNER JOIN ChildValues V
ON M.RN = V.RN