2014-03-27 44 views
1

我有兩個由供應商每晚生成的數據集。這兩個表都不包含主鍵,但行是唯一的。鑑於沒有主鍵,是否有使用SSIS來確定添加,更新或刪除了哪些行的方法?我發現的所有信息似乎都指向需要主鍵。只需對行進行編號就行不通,因爲表格每晚都進行重建。被比較ssis確定沒有主鍵的更新行

該表可能是這個樣子:

TABLE 1       TABLE2 
Name Facility Access   Name Facility Access 
---- -------- ------   ---- -------- ------ 
Bob NJ   Full SA  Bob NJ   Full SA 
Bob NJ   Full AB  Bob NJ   Full DS 
Bob GA   Full SA  Bob GA   Full SA 
Bob GA   Full AB  Bob FL   Full SA 
Bob CA   Full AA  Janet CA   Full AA 

有沒有人遇到過類似的情況嗎?我似乎無法找到一種方法來確定是否在沒有主鍵的情況下插入或更新(或刪除或更新)了一行。有什麼想法嗎?

謝謝您的考慮。

+0

在那裏是的。由於沒有業務關鍵字,因此您將無法確定此新行是對現有行還是對新行進行更新。你可以在所有鍵上計算一個hashsum,並至少確定我是否已經有了這些hashsum,然後刪除不再存在的內容並添加什麼是「新」,但我沒有一個優美的模式。除非你把很多咖啡因和粗俗稱爲模式。 – billinkc

+0

@billinkc您可以每晚創建視圖,然後加入視圖以查看是否有更新? –

+0

由於行是唯一的,所以在概念上,該行是主鍵,因此無論物理數據庫事件如何,都將只進行插入和刪除操作,通過使用合併連接(完全連接)比較整個行可以找到這些操作。 – Jayvee

回答

0

如果我試圖留在SSIS中,我會使用Slowly Changing Dimension組件來滿足這個需求。選擇TABLE2作爲目標表後,我將指定所有列形成業務密鑰。

這將產生新行和更新行的輸出,包括OLE DB目標和OLE DB命令組件。

我會向TABLE2添加另一列以標識「已刪除」行,例如, LastUpdateDateTime。我會添加一個下游執行SQL任務來刪除或更新這些行。所有這一切,我可能會傾向於一個SQL MERGE解決方案,因爲它更靈活和完整。