2012-10-19 40 views
3

我正在嘗試編寫一個SSIS包以將數據從一個數據庫傳輸到另一個數據庫(直接複製,我正在傳輸和傳出的表具有相同的結構體)。我選擇了記錄的一個子集(自上次運行包以來創建或修改的記錄),我試圖將它們轉儲到目標數據庫上的一個存儲過程,這將確定哪些記錄需要更新以及哪些記錄需要插入。我如何通過一個表作爲SSIS DataFlow中的存儲過程參數

我該怎麼做我要麼在數據流對象內部執行此操作,要麼將記錄傳出對象,以便使用執行SQL任務執行操作?

我不想使用OLE DB命令,因爲它一次只能處理一條記錄。這兩個數據庫位於不同位置的不同機器上,並且我希望此包儘可能少地運行,因爲我正在編寫它來替換運行時間過長的DTS包(它將刪除整個目的地表的內容並重新複製所有內容,更改或以其他方式)

+0

您是否考慮過使用SQL複製從源更新遠程數據庫?如果你的源表具有(或可以很容易地更新)主鍵並且相當可靠,那麼應該更容易設置。 – JohnLBevan

回答

2

SSIS不支持表值參數。有幾種變通爲你正在嘗試實現:

  • 有幾個第三方UPSERT /合併目的地,其中包括這一個在CodePlex上http://ssisctc.codeplex.com/wikipage?title=MERGE%20Destination
  • 你可以使用一個OLEDB目的地插入行到一個臨時表,然後從執行SQL任務中針對臨時表運行存儲過程。 (這是我們一直在我當前的項目完成)
  • 你可以寫一個自定義的.NET腳本目標
  • 你可以使用一個查找轉換,看看他們是否存在於表中,然後插入不排存在和運行OLEDB命令對其他人至少會比對每一行運行它更好
+0

使用查找轉換,但將更改的行路由到登臺表並在數據流後執行SQL任務中的更新。這種模式可以讓你避免OLEDB Command的RBAR痛苦。 – billinkc

相關問題