8

2つのテーブルを比較し、一致しない値を別の3番目のテーブルまたはテーブル変数に次のように挿入するマージを作成したいと思います。

MERGE Assets AS target
USING (@id, @name)FROM Sales AS source (id, name) ON (target.id = SOURCE.id)
WHEN MATCHED THEN 
    UPDATE SET target.Status = @status, target.DateModified = SYSUTCDATETIME()
WHEN NOT MATCHED THEN 
    INSERT INTO @tableVar (id, name, status, dateModified)  
    VALUES (@id, @name, @status, SYSUTCDATETIME())

これを行うことはできますか、それとも他の方法がありますか?

4

2 に答える 2

13

あなたはこれを行うことはできません。MERGEソースとターゲットの2つのテーブルでのみ動作します。

要件については、たとえばCTE(共通テーブル式)を使用して一致しない行を見つけ、それらを3番目のテーブルに挿入する必要があります。

何かのようなもの:

;WITH NonMatchedData AS
(
   -- adapt this as needed - just determine which rows match your criteria,
   -- and make sure to return all the columns necessary for the subsequent INSERT
   SELECT (columns)
   FROM dbo.SourceTable
   WHERE ID NOT IN (SELECT DISTINCT ID FROM dbo.TargetTable)
)
INSERT INTO dbo.ThirdTable(Col1, Col2, ....., ColN)
  SELECT Col1, Col2, ....., ColN
  FROM NonMatchedData
于 2012-02-22T15:46:35.300 に答える
11

あなたはこれを非常に簡単に行うことができます...

MERGEステートメントをINSERTINTOFROM内でラップできます:
http ://technet.microsoft.com/en-us/library/bb510625.aspx#sectionToggle2

-また-

マージステートメント内で直接実行できます。

簡単な例:

WHEN NOT MATCHED THEN
    DELETE
OUTPUT Deleted.* INTO dbo.MyTable;

これにより、不一致が既存の宛先テーブルに挿入されます。更新、挿入、削除されたvテーブルを使用して、データを他の場所に転送できます。

于 2012-12-24T20:05:16.490 に答える