基本コードシリーズになりますが、少し複雑なところもあります。
Select/Insert/Updateで代用も可能ですが、それらを1つにまとめる構文になります。
やり方.
MERGE INTO [更新先テーブル名] AS [更新先テーブル変数名]
USING (
SELECT
[カラム1] AS [カラム変数名1]
,[カラム2] AS [カラム変数名2]
,[カラム3] AS [カラム変数名3]
…
FROM [更新元テーブル名]
) AS [更新元テーブル変数名]
ON
(
–結合条件
)
WHEN MATCHED THEN
UPDATE SET
[更新先テーブル変数名].[更新先カラム1] = [更新元テーブル変数名].[更新元カラム1]
,[更新先テーブル変数名].[更新先カラム2] = [更新元テーブル変数名].[更新元カラム2]
,[更新先テーブル変数名].[更新先カラム3] = [更新元テーブル変数名].[更新元カラム3]
…
WHEN NOT MATCHED THEN
INSERT (
[更新先テーブル変数名].[更新先カラム1]
, [更新先テーブル変数名].[更新先カラム2]
, [更新先テーブル変数名].[更新先カラム3]
…
) VALUES (
[更新元テーブル変数名].[更新元カラム1]
,[更新元テーブル変数名].[更新元カラム2]
,[更新元テーブル変数名].[更新元カラム3]
)
コード例.
MARGE文は、テーブルから直接SELECTして更新する方法と、パラメータから取得して単一更新する方法があります。
今回は比較的単純な単一更新のコード例を記載します。
MERGE INTO ALPHABET AS ‘T1’
USING (
SELECT
@A AS ‘A’
,@B AS ‘B’
,@C AS ‘C’
) AS ‘T2’
ON
(
T1.A = T2.@A
)
WHEN MATCHED THEN
UPDATE SET
T1.B = T2.B
,T1.C = T2.C
WHEN NOT MATCHED THEN
INSERT (
A
,B
,C
) VALUES (
@A
,@B
,@C
)
注意点.
1.リンクサーバーでの運用
これは経験則ですが、リンクサーバーだとうまく動作せず、
単純なINSERT&UPDATEだと動作することがありました。
もしうまく動かない等があれば、INSERT&UPDATEもお試しください。
2.結合条件に気を付ける
結合条件には通常 主キーを設定します。
その他復号キーやテーブル定義に合わせた設定が必要です。
MERGE分の最大の肝になります。