![](/img/trans.png)
[英]SQL Server + Select only two records for each masterID in a table
[英]How to copy data in same table with child and MasterID in SQL Server
我们在 SQL 服务器表中有这样的数据:
PID Name RefNo FID
----------------------------
1 ABC G1
2 XYZ G1 1 (1 relate to PID=1)
3 DEF G1 1 (1 relate to PID=1)
为了在同一个表中为 RefNO G2 创建上述数据的副本,我们使用了 SQL 查询
INSERT INTO Table1
SELECT ISNULL(Max(PID),0) + 1, Name, 'G2', FID
FROM Table1
它复制了数据
1 ABC G1
2 XYZ G1 1 *(1 relate to PID=1)*
3 DEF G1 1 *(1 relate to PID=1)*
4 ABC G2
5 XYZ G2 1 *(it should be 4 but it is showing 1 by my query)*
6 DEF G2 1 *(it should be 4 but it is showing 1 by my query)*
请指导我如何编写正确的查询以获得我想要的结果,如下所示
1 ABC G1
2 XYZ G1 1
3 DEF G1 1
4 ABC G2
5 XYZ G2 4
6 DEF G2 4
创建临时表并向其中插入数据。 下面的查询可以帮助您做到这一点。
create table #Temp
(
PID int ,
Name VARCHAR(100),
RefNo Varchar(50),
FID int
)
INSERT INTO #Temp
SELECT * FROM temp1
下面的代码帮助使用 Cursor 将数据插入主表。
DECLARE @Name VARCHAR(50),
@FID INT,@TFID INT = NULL,
@RefNo VARCHAR(10) = 'G2'
DECLARE cur CURSOR
FOR
SELECT Name ,FID
FROM #Temp
OPEN cur
FETCH NEXT FROM cur INTO @Name,@FID
WHILE @@FETCH_STATUS = 0
BEGIN
IF @FID IS NULL
BEGIN
SELECT @TFID = NULL
END
INSERT INTO temp1(Name,RefNo,FID)
VALUES ( @Name, @RefNo, @TFID)
IF @FID IS NULL
BEGIN
SELECT @TFID = @@IDENTITY
END
FETCH NEXT FROM cur INTO @Name,@FID
END
CLOSE cur
DEALLOCATE cur
插入后请删除#tTemp 表
drop table #Temp
您将获得更新的主表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.