2015-09-01 39 views
0

我試圖實現SSIS如下:SSIS NOT EXISTS在一個數據流

聯盟所有6個獨立的SQL查詢(OLE DB源)(這個數據集A) 數據集包含

id Col A Col B...... 
1 
2 
3 
4 
5 
6 
7 
8 

我還有一個OLE DB源的SQL查詢(數據集B)包含

id Col A Col B ....... 
1 
2 
3 
4 
10 
11 
12 

所有列柱A,色柱B等在所有查詢相同。

我想有一些在執行前盟與數據集B返回數據集被聯合(UNION ALL),其中在數據集B中的ID不匹配的數據集A的IDS即

id Col A Col B...... 
1 
2 
3 
4 
5 
6 
7 
8 
10 
11 
12 

而且在數據集B上完成額外的工作以填充列中的NULL值。

我可以非常容易地將數據集A插入表中,然後在隨後的NOT EXISTS或類似查詢中使用此表來獲取缺失的信息,然後將UNIONing放在一起。理想情況下,儘管我希望通過雙向多點傳送進行一次掃描,一側進入查找不匹配,另一側進入目標表。

不幸的是,查找和不匹配輸出返回「錯誤」的缺失數據,即返回

5 
6 
7 
8 

而不是

10 
11 
12 

這是因爲查找(數據集B)和源數據(數據集A)是「錯誤的方式」。我不想重寫數據集A作爲查找查詢,所以有另一種方法使用不同的轉換或其他方法?

我已經嘗試過緩存轉換,但它似乎不像查找轉換那樣在查找轉換的同一數據流中工作,因爲存在讀/寫爭用。

謝謝, 豐富。

回答

1

聽起來就像你想要一個「富勒外部聯接」種類的「合併」組件,然後在事實之後進行手動合併。如果我誤解你了,你可以隨時添加一個條件性拆分合並後,過濾如果A爲空,如果B爲空,等

http://i.stack.imgur.com/dC2Hx.png

一個例子「合併列」正在創造一個重複 「ID」 這個表達: 「ISNULL(ID_A)ID_B:ID_A?」

爲 「全外連接 - 合併」 的一個例子:enter image description here

+0

感謝您的快速回復。我假設我可以在Lookup中選擇駕駛數據集,並使用No Match Output。你的方法很好,但爲了我的需要矯枉過正。我只需將數據集A插入到結果表中,然後將該結果表作爲使用數據集B的另一個查詢的一部分並將其並用2。 –