MERGE
残念ながら、1つの条件に複数のアクションを適用させたり、1つの行に複数回動作させることはできません。
が
INSERT INTO DimTable
SELECT ID, Name, StartDate, null as EndDate
FROM
(
MERGE DimTable AS tgt
USING StageTable AS src
ON tgt.id = src.id AND tgt.enddate IS NULL
WHEN MATCHED THEN
UPDATE SET tgt.enddate = src.startdate
WHEN NOT MATCHED THEN
INSERT INTO (ID, Name, StartDate)
VALUES (src.id, src.name, src.startdate)
OUTPUT $action as Action, src.ID, src.Name, src.StartDate
) a
WHERE
a.Action = 'UPDATE'
キーあなたは彼らに何が起こったのか正確にを知っているので、実際にそれらの行をリダイレクトしますOUTPUT
句があります:
だから、私は何をやっていることはMERGE
をINSERT INTO
ラッピングを使い切るです。華麗な機能、本当に。
@Eric:実際には、NO MATCHでは複数のコマンドを発行できますが、MATCHでは複数のコマンドを使用することはできません。このBOLの例を見てください。ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10de_1devconc/html/952595a6-cf1d-4ff5-8927-66f9090cf79d.htm –
そのリンクは私のためには機能しませんが、私は'insert into'でラップされた' merge'コマンドを使うように変更しました。私は実際にそれを使用しましたが、最初に答えたときには完全に空白になりました。 – Eric
@エリック、おい...あなたはBOMB –