2012-06-12 72 views
2

我有一個SSIS應用程序需要從不同服務器(不是鏈接)的2個數據庫中獲取數據。我需要獲取2數據庫之間的匹配名稱和DOB記錄,然後使用結果插入/更新表格。 我最初的方法是使用OLE DB源然後合併連接並將結果放入記錄集。然後在控制流中,使用記錄集的結果插入/更新表。但是我無法在控制流中看到記錄集。 替代解決方案是創建臨時表。但臨時表不可見,因爲它們駐留在每個服務器的tempdb數據庫中。 這個問題更好的方法是什麼?SSIS:記錄集或臨時表

+0

服務器A和服務器B上的數據。一組表是驅動程序而另一組表是否需要合併並加載到最終目的地? – billinkc

回答

1

你是什麼意思put the results to recordset

如果您使用連接在數據流上連接兩個源,則該連接上的「記錄集」僅在當前數據流期間可用。在數據流爲finisehd後,您不能在控制流上使用它。

爲什麼不能在目標數據庫中插入結果集?您可以對同一數據流執行任何其他變換操作,並將結果插入到目標數據庫中。或者,如果您確實需要在插入數據之前在控制流中執行某些操作,那麼您可以使用oleDBDestination將記錄集插入到目標的臨時表上,並在另一個數據流中訪問(雖然不是很好的做法)

+0

感謝您的回答。我已經使用了OLE DB目標,然後創建另一個包來使用OLD DB Command更新其餘表。 – dmarkez

1

在這種情況下,我會爲工作表保留一個數據庫或爲這些工作表創建一個模式。

接下來,添加一個SQL控制流任務,該任務截斷將保存中間結果的表。之後,將中間結果集加載到表中,執行操作並可選擇再次截斷表。

對於較小的數據集,記錄集目標是可以的。但是,如果您打算將其用於不適合內存的較大數據集,它將會非常緩慢。

如果您沒有可用作工作區的數據庫/架構,則可以使用RAW文件來保存中間結果。這些速度也非常快。