MW211 EXIT

devlog
MSSQL/MERGE INTOで差分がある時だけ更新
2020年09月25日
USINGの前にNOT EXISTSで同一データを除外。
(後で除外するとNOT MATHCED扱いとなるので注意)
同一判定をする時にはNULLに注意(NULLのままでは不一致になるので空文字に置換)。
┌──────────────────────────────────────┐
│MERGE INTO [出力D]                                                         │
│    USING (                                                                 │
│        SELECT [キー],                                                      │
│               [データ],                                                    │
│               GETDATE() AS [更新日時]                                      │
│            FROM [入力D]                                                   │
│            WHERE NOT EXISTS (                                              │
│SELECT *                                                                    │
│    FROM [出力D]                                                           │
│    WHERE ISNULL([出力D].[キー]  , '') = ISNULL([入力D].[キー]  , '')     │
│      AND ISNULL([出力D].[データ], '') = ISNULL([入力D].[データ], '')     │
│                  )                                                         │
│    ) AS [入力D]                                                           │
│      ON  [入力D].[キー] = [出力D].[キー]                                 │
│    WHEN MATCHED THEN                                                       │
│        UPDATE SET [データ]   = [入力D].[データ],                          │
│                   [更新日時] = [入力D].[更新日時]                         │
│    WHEN NOT MATCHED BY TARGET THEN                                         │
│        INSERT (                                                            │
│                [キー],                                                     │
│                [データ],                                                   │
│                [更新日時]                                                  │
│            ) VALUES (                                                      │
│                [入力D].[キー],                                            │
│                [入力D].[データ],                                          │
│                [入力D].[更新日時]                                         │
│            );"                                                             │
└──────────────────────────────────────┘
こうすると、更新日時の変更を差分があった時に限定できる。
分類:MSSQL