簡體   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