2017-07-18 2 views
0

私は2つのテーブル、マスターテーブルとリレーションテーブルを持っています。挿入時に生成される自動識別IDフィールド(DOCUMENT_ID)としてのマスター表。リレーションテーブルは、マスタテーブルのDOCUMENT_IDとUSER_NAMEエントリを関連付けます。 masterテーブルでレコードのコピーを作成し、その関係のコピーを関係テーブルに作成し、Masterテーブルによって生成された新しい自動生成DOCUMENT_IDを使用して新しい関係を確立したいと考えています。ここに私のテーブルと望ましい出力の例があります。SQL一意のIDとその関係エントリを持つマスターレコードをコピーする方法

マスターテーブル:

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 

私の出力は次のようになりますように、私は、マスターテーブルからレコードをコピーして、関係のコピーを作成したいと思います:

NEW RECORDSを挿入したマスターテーブル: DOCUMENT_ID列がIDを自動的に生成したことに注意してください。

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

関係テーブル: このテーブルは、元DOCUMENT_IDsに関連付けられたマスターテーブルとUSER_NAMESのコピーで作成された新しいIDとの関係を結ぶ必要があります。

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 
+0

が重複する可能性が? ](https://stackoverflow.com/questions/9156340/how-to-copy-a-row-and-insert-in-same-table-with-a-autoincrement-field-in-mysql) –

+0

これはありません重複している – Teeko

+0

2つのクエリを使用する必要があるかもしれません(マスターテーブルとリレーションシップテーブルに1つ) –

答えて

0

私はこのTSQLをテストする時間がありませんでしたが、それはあなたのアイデアを与える必要があります:行をコピーして、MySQLで自動インクリメントフィールドと同じテーブルに挿入する[方法の

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 
関連する問題