SQL Server 2008からの新機能。

(Oracleには前からあった)

MERGE table1
USING table2
ON (
table1.field1 = table2.field1
)
WHEN MATCHED THEN
UPDATE
SET table1.field2 = table2.field1
WHEN NOT MATCHED THEN
INSERT (
field1,
field2
)
VALUES (
table2.field1,
table2.field2
);
  • 「マッチしないときだけ追加」したい場合はWHEN MATCHED THENのブロックをなくせばよい(逆の場合はNOTの方)
  • INSERT句をの追加先フィールド名をテーブル名で修飾すると下記のようなエラーが出る。

メッセージ 10739、レベル 15、状態 1、行 14

MERGE ステートメントで使用される INSERT 列リストに、マルチパート識別子を含めることはできません。代わりに、シングルパート識別子を使用してください。

Similar Posts: