2010-03-19 36 views
1

我正在創建一個服務器(server1)上的SSIS包,該服務器查看另一個站點(server2)上的一個sql數據庫中的數據,並複製相關的行。SSIS將數據從一個表複製到另一個不在目標表中的數據

所需的SQL語句是:

SELECT * 
FROM server2.ordersTable 
WHERE 
OrderID Not In (SELECT OrderID FROM server1.ordersTable 

這在Server1這是不是在Server2上的表中選擇數據(基於訂單ID) 然後我需要的結果插入到Server1上表

我該如何處理?我需要什麼組件等...?

回答

0

您可以創建一個鏈接的服務器對服務器的一個先說LinkedServer1 server1的,然後你可以使用OPENQUERY,如:

SELECT * FROM server2.OrdersTable WHERE 訂單ID NOT IN ( SELECT的OrderID FROM OPENQUERY(LinkedServer「,選擇的OrderID FROM LinkedServer1.OrdersTable) )

1

假設你可以使用OPENQUERY或直接鏈接服務器加入Server2上到Server1(在你的榜樣或@schrodinger答案的代碼),這將是最大限度地減少線路數據的最佳解決方案。

但如果沒有,你還有其他兩個選項:

1)您可以使用SSIS查找數據流轉換檢查記錄對現有OrderIDs只有使用推新紀錄條件拆分變換。

2)您可以將Server2上的整個表格轉移到Server1上的臨時表格中,然後使用您發佈的代碼的變體在Server1上進行比較。

1

意識到這是一個古老的線程...

如果你想這樣做在SSIS中,我會建議與數據流:

  • 兩個數據源。
  • 源A選擇你想要移動
  • Source B中的數據的選擇從目的地
  • 運行兩個來源爲合併連接配置爲LEFT JOIN
  • 運行連接結果爲有條件的分裂的關鍵,定義來自源B的密鑰爲空的輸出
  • 將分割的適當輸出運行到目標,該目標將相應的表插入相應的表中。

有很多增強功能可以支持附加功能,如處理更新和刪除。還有一些性能調整技巧可以根據數據量的要求應用,其中最簡單的方法是檢查源數據的修改日期與上次運行包的時間,以減少源A選擇的記錄數。

相關問題