2017-10-16 53 views
0

我有一個表至極沒有它的維度表,例如,下表中我只有描述性的項目(功能),而不是維度表的鍵:創建SQL Server中的尺寸

Id Employee Function 
1 Chris  Bartender 
2 Millena Waiter 
3 Jessica Firefighter 
4 Paul  Waiter 

我沒有DIM_Function,換句話說,我想創建一個具有這些值的維度表,並且隨着表的增長和新記錄填充到我的表中,另一個DIM_Function必須具有這些值。我已經聽說了代用鍵,但不知道如何使用它。

最後,創建事實表,「功能」列必須將我創建的ID存儲到DIM_Funcion中。

謝謝。

+0

我完全不明白在這裏試圖完成什麼。 –

+0

我沒有維度表,所以我想創建一個 –

+0

那麼是什麼阻止了你? –

回答

0

這樣做的基本思想是,您將創建一個帶ID的唯一值的維度表(ID列將是主鍵和標識列),然後使用該ID更新您的事實表。然後,無論何時將更多數據加載到事實表中,首先都要從維度表中檢索每條記錄的ID。如果找不到,您將爲其插入一條新記錄,然後檢索新的ID。這樣做的一個方法是通過一個存儲過程 - 與原始數據已被寫入到一個臨時表 - 並會看起來像這樣(用你的「功能」爲例):

UPDATE Staging 
SET S.FunctionID = D.FunctionID 
FROM 
    Staging S 
    JOIN Dim_Function D ON S.[Function] = D.[Function] 

IF EXISTS (SELECT * FROM Staging WHERE FunctionID IS NULL) 
BEGIN 

    INSERT INTO Dim_Function ([Function]) 

    SELECT DISTINCT [Function] 
    FROM Staging 
    WHERE FunctionID IS NULL 
    ; 

    UPDATE Staging 
    SET S.FunctionID = D.FunctionID 
    FROM 
     Staging S 
     JOIN Dim_Function D ON S.[Function]= D.[Function] 
    WHERE S.FunctionID IS NULL 

END 

還可以再插入'FunctionID'而不是實際的'Function'值(從登臺表)到事實表中。