2016-04-22 89 views
0

我有一個行爲奇怪的SSIS查找。它在大多數情況下都能很好地匹配數據,但在許多情況下,當數據查看器顯示數據匹配時不提供匹配。真奇怪的是,查找連接使用不帶where子句的SQL查詢。如果我將SQL查詢更改爲包含只返回類似於不匹配的行的where子句並重新運行它;那麼數據匹配。SSIS查找行爲很奇怪

例如,如果SQL查詢是:

Select ColumnA, ColumnB 
From TableA 

ColumnA是我在尋找一個匹配的人; ColumnB是一個我要添加到數據流。

查詢提供這樣

AA, B 

AC, D 

BE, F 

BG, H 

結果(所有數據都是大寫所以這不是一個問題)

我輸入列相匹配的交流,但沒有匹配,返回(它返回AA和BG的匹配)。然而,如果我更改查詢以包含這樣的where子句: 其中ColumnA像'A%'(僅返回兩行)

然後我得到一個匹配。 有沒有人見過這樣的事情,並有修復?

+0

您是否試圖匹配等於或包含某些值的列?添加兩個表格的明確樣本 –

+0

我不能做一個樣本;涉及私有和私有數據。我給出的例子說明了這個問題。來源的列是AC,它必須與提供AC的查詢中的列匹配。如果你以前從未見過這樣的事情,那麼你可能沒有答案。 – Thursty

+1

'SELECT RTRIM(ColumnA)AS ColumnA,ColumnB'並且還確保你有一個RTRIM應用於SourceA - 你現在得到匹配嗎? – billinkc

回答

2

我懷疑你的例子太簡單了。

使用SSIS查找必須瞭解與數據庫比較的區別。

完全緩存模式下的SSIS查找是在內存中獨佔完成的。這意味着比較在SSIS組件內完成,而不關注數據庫整理。因此,你很容易在你原來的文章中提到大寫字母的問題。

可能有細微的差別:

  • 開頭或結尾的空格
  • 突出人物或別的東西miht通過整理
  • 不同的數據類型而受到影響。例如,如果您對數字數據類型進行查找,只要匹配具有完全相同的數據類型即可。 (24.00不匹配24.0)...

希望解決方案是上述之一。

0

我找到了答案,但我想評論一下,通過刪除前導/尾隨空格等強制完全匹配的所有建議已經嘗試過。

我發現一個不相關的函數調用會失敗,對於某些數據並停止查詢,但在查找過程中,它會靜默失敗,並且程序包將繼續運行。我從來沒有見過查詢失敗不會導致包失敗,但發生在這種情況下。所以,當發生這種情況時,應該匹配的數據將不會被添加到查找緩存中,並且不會找到匹配項。當使用只會返回類似行的where子句限制查詢時,不會發生故障並且數據會匹配。這就是爲什麼這種行爲看起來很奇怪。我不知道爲什麼查詢失敗時程序包不會失敗。在我看來,軟件包應該失敗了,並且關於查詢的錯誤而不是停止查詢並繼續執行包。