挿入... マージ... 選択: MERGE を利用して生成された ID を取得
SQL Server では、INSERT... SELECT ステートメントを使用すると、別のテーブルまたはクエリからターゲット テーブルにデータを挿入できます。ただし、複数のソースから値を抽出する場合には制限があります。解決策としては、MERGE ステートメントを使用すると、挿入データとソース データの両方を取得できるようになります。
説明のために、次の状況を考えてみましょう。
INSERT INTO Table3 (Column2,列 3、列 4、列 5)<br>SELECT null、110、Table1.ID、 Table2.Column2<br>FROM Table1<pre class="brush:php;toolbar:false"> JOIN Table1Table2Link on Table1.ID=Table1Table2Link.Column1 JOIN Table2 on Table1Table2Link.Column2=Table2.ID
Table3 と Table2.ID から生成された ID (Inserted.ID) を取得して挿入する必要が生じます。一時テーブルまたは変数に変換します。この目的には OUTPUT 句がよく使用されますが、別のテーブルからデータを抽出することはできません。
解決策は、INSERT...SELECT の代わりに MERGE を使用してテーブルにデータを設定することです。これにより、出力句の挿入値とソース値の両方にアクセスできるようになります:
MERGE INTO Table3 USING<br>(</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">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 --常に一致しない
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);
MERGE を使用すると、OUTPUT 句は挿入された ID (Inserted.ID) と Table2 からの値 (Table2.ID) の両方を取得し、さらに使用するために @MyTableVar に挿入できます。処理中です。
以上がMERGE ステートメントは、SQL Server の INSERT 操作で生成された ID とソース データをどのように取得できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。