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