2009-07-23 19 views
1

私はデータウェアハウスを管理しています。私はいくつかのディメンションテーブルを持っているが、そのうちの大部分はタイプ2であり、一部はタイプ-1である。MERGEコマンドを使用してタイプ2次元を更新する

MERGEを使用してタイプ1のディメンションテーブルを維持する方法を理解できました。

タイプ2のディメンション表の作成方法がわかりません。

EndDateの更新とMERGEコマンドを使用した挿入の両方を行うにはどうすればよいですか?

答えて

2

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句があります:

だから、私は何をやっていることはMERGEINSERT INTOラッピングを使い切るです。華麗な機能、本当に。

+0

@Eric:実際には、NO MATCHでは複数のコマンドを発行できますが、MATCHでは複数のコマンドを使用することはできません。このBOLの例を見てください。ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10de_1devconc/html/952595a6-cf1d-4ff5-8927-66f9090cf79d.htm –

+0

そのリンクは私のためには機能しませんが、私は'insert into'でラップされた' merge'コマンドを使うように変更しました。私は実際にそれを使用しましたが、最初に答えたときには完全に空白になりました。 – Eric

+0

@エリック、おい...あなたはBOMB –

関連する問題