2012-06-15 93 views
1

我不知道這是否可以做或沒有,但基本上,我有以下數據流: SSIS ImportSSIS OLE DB有條件的「插入」

  1. 提取物從一個XML文件中的數據(正常工作)
  2. 簡單地拆分基於一個封閉的狀態(正常工作)紀錄
  3. 必須添加一個派生列對象,由於一些字符集問題(可能是更好的方法,但它的工作原理)

現在,「步驟4」就是我遇到的情景,我只想插入在數據庫中具有相應匹配項的值,例如,XML中有大約6000條記錄,並且從中也許10我需要匹配和插入他們,而不是插入他們所有的6000,並做了事後比較(我也可以做,但希望有另一種方法)比較。我在想,我可能能夠在OLE DB DESTINATION對象中執行一個sql插入命令,其中文件中的ID值與之匹配,但這就是我沒有100%清楚或者甚至可能出現這種情況。我應該簡單地進入臨時表路線並在事後清理數據,還是可以直接在目的地塊中執行此操作?任何建議將不勝感激。

編輯

感謝來自billinkc最後的評論,我設法弄到有點接近,在那裏我可以找出結果集中的匹配和使用,但不知何故,似乎運行的數據流兩次,這是奇怪的....我拿出查找對象,看看它是否造成它,似乎是這種情況,爲什麼它會運行整個流程兩次,增加了查找的任何原因?我應該總共有8場比賽,我使用數據查看器輸出進行了確認,但是它似乎是在同一個文件中第二次運行它。

enter image description here

回答

2

有沒有什麼不能使用查找轉換查找現有記錄的原因。配置它,以便它將不匹配的記錄路由到不匹配輸出,然後只將匹配找到的連接器連接到「導航器登臺管理器資金」

我相信答案是你問的,但是我想知道,重新表達正確的願望?我的假設是查找會違背現有目的地,所以查找返回一行中的id 10。 SSIS中所有開箱即用的目的地只執行插入操作,因此發現匹配的行現在會翻倍。在查找現有行時,通常意味着您想要對現有行執行更新。如果是這種情況,那麼就有一種特別設計的轉換,即OLE DB命令。它是允許更新的組件。該組件存在性能問題,它會爲每個流過它的單個行發佈一條更新語句。對於10排,我認爲沒關係。否則,您要使用的模式是將所有新行(插入)寫入目標表中,然後將所有更改的行(更新)寫入第二個分段類型表中。數據流完成後,使用執行SQL任務執行基於集的更新語句。

有處理組合upserts的第三方選項。我知道Pragmatic Works有一個選項,在tasks and components網站上可能有其他人。