2014-06-13 120 views
0

背景:任意列數SQL數據集(SQL Server集成服務[SSIS])

我試圖重複的.sql文件列表,執行每個文件,保存每個查詢到的結果一個特殊命名的分隔文本文件。現在,我使用完全獨立的C#程序來實現這一點。我是SSIS新手,但我非常擅長C#。在IT部門,我將繼續努力,SSIS是首選解決方案,因此將其全部應用於巨型腳本操作(可惜)並非解決方案。

問題:

下面是我的控制流的圖片。

Control Flow

所需的效果如下:

  1. 的foreach循環通過的.sql文件的文件夾。
  2. 加載SQL任務將當前.sql文件的內容分配給一個變量。

    (這兩個步驟工作)

  3. 數據流任務:

    Data Flow

    1. 執行SQL的變量和!
    2. 將任意大小的結果保存到變量或文件中。
  4. (回到控制流:)丟失:保存具有不同分隔符和不同文件名的報告。

  5. 上傳報告執行WinSCP抓取文件並將其放入n> 1個指定位置。

問:

如何使數據流不在乎有關數列的?例如,報告1具有五個列,報告2具有,並且報告3具有。所有這些都可以。我不在乎它有多少列,在這種情況下,我真的很少關心元數據。

我可以用C#做​​到這一點,只是說「這是一個DataTable,填充它。」 SSIS顯然缺乏適應列數的能力。是?沒有?說擰它,只是用腳本對象做?在這裏做什麼,接受的智慧是什麼?

如果這個問題揭示了SSIS工作原理的一些基本誤解,請隨時評論一下。

在此先感謝!

+0

如果您已經知道如何,請編寫它。具有任意列的SSIS在2008年很困難。我不知道那個版本。 –

回答

0

我會放棄這整個方法 - 這不是SSIS成功的道路。

SSIS緩存數據流元數據(例如列,數據類型,甚至是數據類型精度),並且元數據中的更改通常意味着包設計中的更改。

取而代之,我將構建一個包含3個數據流任務的SSIS包,或者您有多個變體(每個「Report」/ SQL腳本一個)。每個數據流任務內都將是一個OLE DB源和一個平面文件目標。

運行時的強度變得很明顯 - SSIS可以並行執行多個數據流任務(默認設置爲#cores * 2),並以盲目的速度輸出文本文件數據,與C#相比。