2016-07-14 48 views
1

我有一個STG表,我們每天從兩個SRC表中截斷並將值加載到STG表中。我在STG表中創建了一個更改標誌(Ch_Flg),因此,不是每天都截斷表,只有當SRC中的某些字段發生更改時,纔會將值插入到STG中。但是,由於SRC表直接加載到STG,所以我需要一個臨時表,在這裏我可以存儲所有SRC記錄,並用STG檢查記錄是否已更改,並且僅當這些記錄已更改時才插入STG。如果來自src的值已經改變,將記錄插入表中

例如,SRC1表有像(ID,名稱,標籤,行業,部門,城市,電話,僱傭日期等)和SRC2已經像(ID,姓名,能力,城市,電話等)列

我應該將SRC中的所有值加載到臨時表中,然後將它們與STG表進行比較?還是有更有效的方法來做到這一點?

回答

0

你可以把它們加載到臨時表,然後做這樣的事情

WITH SINGLES AS 
(
SELECT t1.ID 
FROM <sourcetablename> t1 
LEFT JOIN <desttablename> t2 
ON (t1.id = t2.id) 
WHERE t2.id IS NULL 
) 

INSERT <tabletherecordswillbeinserted>(ID, <otherfield>, <otherfield2>) 

SELECT S.id, S.<otherfield1>, s.<otherfield2> 
From singles S 
Left Join <sourcetablename> on S.id = <desttable>.id 
Where <desttable>.id Is Null 

您可能需要在改變標誌設置的代碼添加但這是一般的想法,你可以把改變標誌CTE聲明

+0

感謝您的結構。單打是什麼? –

+0

這就是所謂的「公用表表達式」或CTE,它是一種收集特定數據集並對其執行其他操作的方法。因此,在這種情況下,如果您在With中使用select語句並將其與您的表一起運行,您將從一個表中取回所有內容,而不是另一個表中的所有內容。然後,我們採取該組數據並將不存在的記錄插入到目標表中。在你的情況下,我想你只對帶有填充更改標誌的記錄感興趣。所以你可以做你的記錄改變,然後插入下面。 – DrHouseofSQL

+0

編輯:我在腳本底部的所有'其他字段'都需要放在WITH語句的原始選擇中。對不起,關於那 – DrHouseofSQL

相關問題