繁体   English   中英

如何在 SQL 服务器中复制具有子和 MasterID 的同一个表中的数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM