SQL如何使用唯一ID及其关系条目复制主记录

时间:2017-07-18 14:04:24

标签: sql sql-server

我有两个表,一个主表和一个关系表。主表作为插入时生成的自动标识ID字段(DOCUMENT_ID)。关系表将主表中的DOCUMENT_ID与USER_NAME条目联系起来。我希望能够在使用Master表生成的新自动生成的DOCUMENT_ID建立新关系的同时,在主表中创建记录的副本以及在关系表中创建其关系的副本。这是我的表和所需输出的示例。

MASTER TABLE:

DOCUMENT_ID |  DOCUMENT_NAME
1           |  Application
2           |  Invoice
3           |  Receipt  

关系表:

DOCUMENT_ID|       USER_NAME
1          |       John
1          |       Amy
2          |       Jim
2          |       Jane
3          |       John
3          |       Jane

我想从主表中复制记录并创建关系的副本,以便我的输出如下所示:

插入新记录的主表: 请注意,DOCUMENT_ID列会自动生成ID。

DOCUMENT_ID |  DOCUMENT_NAME
1           |  Application
2           |  Invoice
3           |  Receipt  
7           |  Application
8           |  Invoice
9           |  Receipt  

关系表: 此表需要绑定主表中创建的新ID与原始DOCUMENT_ID关联的USER_NAMES副本之间的关系。

DOCUMENT_ID|       USER_NAME
1          |       John
1          |       Amy
2          |       Jim
2          |       Jane
3          |       John
3          |       Jane
7          |       John
7          |       Amy
8          |       Jim
8          |       Jane
9          |       John
9          |       Jane

1 个答案:

答案 0 :(得分:0)

我没有时间测试这个TSQL,但它应该给你一个想法:

declare @documentID int
declare @newDocumentID int
declare @documentName VARCHAR(256)

declare master_cursor cursor for
select DOCUMENT_ID, DOCUMENT_NAME
from MASTER_TABLE

OPEN master_cursor   
FETCH NEXT FROM master_cursor INTO @documentID, @documentName

WHILE @@FETCH_STATUS = 0   
BEGIN   
    INSERT INTO MASTER_TABLE(DOCUMENT_NAME) VALUES (@documentName)
    -- read the just inserted Document ID
    SELECT @newDocumentID = MAX(DOCUMENT_ID)
    FROM MASTER_TABLE
    WHERE DOCUMENT_NAME = @documentName 

    -- now insert new values in relations table
    INSERT INTO RELATIONS_TABLE
    SELECT @newDocumentID, USER_NAME
    FROM RELATIONS_TABLE
    WHERE
    DOCUMENT_ID = @documentID 

    FETCH NEXT FROM master_cursor INTO @documentID, @documentName
END