2014-06-13 21 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#相比。