복붙노트

[SQL] 삽입 속으로 ... 병합 ... 선택 (SQL 서버)

SQL

삽입 속으로 ... 병합 ... 선택 (SQL 서버)

나는 전문 지식을 사용할 수 있습니다. 나는 다음과 같은 코드가 있습니다 :

INSERT INTO Table3 (Column2, Column3, Column4, Column5)
SELECT null, 110, Table1.ID, Table2.Column2
FROM Table1
     JOIN Table1Table2Link on Table1.ID=Table1Table2Link.Column1
     JOIN Table2 on Table1Table2Link.Column2=Table2.ID

지금은 Inserted.ID (표 3의 삽입에 생성되는 아이덴티티) 및 Table2.ID을 임시 테이블이나 테이블 변수 중 하나에 삽입해야합니다. 일반적으로 나는 OUTPUT 절을 사용하지만, 출력은 다른 테이블에서 데이터를 얻을 수 없습니다. 지금은 MERGE와 함께 할 수 있지만, 나는 확실히 그것에 대해 이동하는 방법을 모르겠습니다 생각합니다. 내가 좋아하는 뭔가가 필요 :

INSERT INTO Table3 (Column2, Column3, Column4, Column5)
OUTPUT Inserted.ID, Table2.ID into @MyTableVar
SELECT null, 110, Table1.ID, Table2.Column2
FROM Table1
     JOIN Table1Table2Link on Table1.ID=Table1Table2Link.Column1
     JOIN Table2 on Table1Table2Link.Column2=Table2.ID

이 중복 질문입니다하지만 난 아무것도 찾을 수 있다면 죄송합니다.

해결법

  1. ==============================

    1.트릭은 대신 INSERT의 MERGE 문을 사용하여 테이블을 채우는 것입니다 ... SELECT. allowes 당신은 출력 절에 모두 삽입 및 소스 데이터의 값을 사용합니다 :

    트릭은 대신 INSERT의 MERGE 문을 사용하여 테이블을 채우는 것입니다 ... SELECT. allowes 당신은 출력 절에 모두 삽입 및 소스 데이터의 값을 사용합니다 :

    MERGE INTO Table3 USING
    (
        SELECT null as col2, 
               110 as col3, 
               Table1.ID as col4, 
               Table2.Column2 as col5,
               Table2.Id as col6
        FROM Table1
        JOIN Table1Table2Link on Table1.ID=Table1Table2Link.Column1
        JOIN Table2 on Table1Table2Link.Column2=Table2.ID
    ) AS s ON 1 = 0 -- Always not matched
    WHEN NOT MATCHED THEN
    INSERT (Column2, Column3, Column4, Column5)
    VALUES (s.col2, s.col3, s.col4, s.col5)
    OUTPUT Inserted.ID, s.col6
    INTO @MyTableVar (insertedId, Table2Id); 
    
  2. from https://stackoverflow.com/questions/41184310/insert-into-merge-select-sql-server by cc-by-sa and MIT license