2017-10-11 45 views
2

首先要做的事情。我對SSIS完全陌生,並試圖找出它在ETL方面的潛力,並最終轉向SSAS。我有以下情形:SSIS - 使用ODBC SQL執行任務將參數導入要導入的結果集

  1. 我有一個InterSystems的數據庫,我可以通過ADO .NET
  2. 我想從這個數據庫中提取數據,並通過增量加載使插入到MS SQL連接

我建議的解決方案/目標是:

  1. 在MS SQL中有存儲最後指針讀取或日期/時間快照的表。 (在這個階段不合適)。讓我們保持簡單並說我們要使用Intersystems數據庫中存在的記錄ID從此表中獲取指針並通過ODBC將其用作參數來讀取源數據庫,然後插入到目標MS中SQL db
  2. 更新指針,讀取最後一條記錄,以便下一次我們從那裏繼續。 (我並不想進入更新/刪除的併發症,讓我們保持它的簡單。)

迄今取得的進展:

  1. 我必須成功,以與MS SQL連接讀取從那裏指針,並將其放置在一個變量
  2. 我設法用參數來讀取InterSystems的DB數據使用[Execute SQL task],我把那到使用FullResultSet
  3. 我已成功使用使用[ForEach Loop Container]變量[Foreach ADO Enumerator]要通過每個記錄和每個字段(yeeeey!)

現在。我可以使用[Script task],它使用VB.NET代碼(理論上)插入MS SQL數據庫,然後使用從源數據庫讀取的最後一條記錄更新計數器。我花了無數時間尋找使用ODBC參數的解決方案,以上是我看到工作的唯一方法。

我的問題是這樣的:

這是唯一的途徑和最佳實踐?是不是有一些簡單的方法,我可以將這個結果集插入一些數據流組件,這些組件爲插入和更新記錄指針給我?

請假定我沒有權限訪問Intersystems Db,因此我無法對錶結構進行任何更改。但我只能讀取數據,以便將其放入MS SQL中。

在給你們(或加侖?)

+0

你應該爲u唱一個數據流而不是執行sql到一個變量中,並在foreach中逐行處理。我將在下面的回答中加以解釋 – KeithL

+0

您正在尋找[集成系列階梯,第4級更新增量裝載行](http://www.sqlservercentral.com/articles/Stairway+Series/76390/) – billinkc

回答

0

我建議使用一個數據流,以提高你的兩個效設計(散裝VS排在腳本行)和易用性(無需編寫腳本) 。

  1. 您應該使用執行SQL來獲取指針並將其保存到變量中。
  2. 你應該使用動態sql和上面的變量來構建一個sql變量。
  3. 請在管理數據連接到源
  4. 添加一個數據流,並進入它
  5. 從彈出
  6. 添加源管理器和選擇信號源選擇從變量SQL和選擇你的變量

此時,您應該擁有所需的所有數據,並且可以繼續轉換或直接加載到目標。

編輯:記錄指針部分

  • 增加組播(這使得儘可能多的拷貝,只要你想)
  • 添加聚合對象和max(無論您的指針)
  • OleDBSQL對象(支持實時SQL,主要用於更新
  • 9A。UPDATE 「YourPointerTable」 SET 「PointerField在DB」=?(?其實就是你需要輸入的內容。

    9b。地圖,無論你在步驟命名8

    這將允許您處理插入/更新

  • 從組播流的新流,以查找對象,並映射你的鑰匙目標表的
  • 指定沒有匹配的關鍵重定向到無匹配輸出
  • 你的比賽映射到一個UPDATE
  • 你沒有匹配的映射到一個插入
  • +0

    KeithL - 「我會建議使用數據流來改進你的設計」。這是我第一次嘗試。但是發現數據流中的ODBC數據源不支持參數。沒有選擇,如果你放?它會在'解析'sql查詢時出錯。這就是爲什麼我選擇了「執行SQL任務」來獲取數據,因爲它是唯一支持參數的選項。 – user7414160