2009-07-23 50 views
1

我在管理數據倉庫。我有幾個維度表,其中大部分是類型2和一些是類型1。使用MERGE命令更新類型2尺寸

我能弄清楚如何使用MERGE來維護我的1型維度表。

我很困惑如何做類型2維度表。

我該怎麼做,更新EndDate和使用MERGE命令插入?

回答

2

MERGE不幸的是,不會讓您將多個操作應用到一個條件,或讓您在一行上多次操作。

所以,我要做的就是使用INSERT INTO包裹起來MERGE

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條款,實際上會重定向這些行,所以你知道確切他們發生了什麼。真是太棒了。

+0

@Eric:實際上,它會讓我在NO MATCH上發出多個命令,但不會讓我在MATCH上有多個命令。看看這個BOL示例ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10de_1devconc/html/952595a6-cf1d-4ff5-8927-66f9090cf79d.htm – 2009-07-23 17:55:47