我有一个在SSIS中执行的SQL查询,用于将数据加载到CSV文件中,如下所示:
SELECT *
FROM SomeTable
WHERE SomeDate BETWEEN '1-Jan-2016' AND '31-Dec-2016'
AND Param1 = 2 AND Param2 = 2
当这是用QlikView编写的时候,我使用了这样的参数:
SELECT *
FROM SomeTable
WHERE SomeDate BETWEEN '1-Jan-2016' AND '31-Dec-2016'
AND Param1 = $(Param1) AND Param2 = $(Param2)
现在我已将整个任务迁移到SSIS,我正在弄清楚如何获取Param1和Param2将被动态分配。例如,在QlikView中,我创建了一个由另一个查询填充的表:
SELECT Param1, Param2
FROM ThisTable
WHERE SomeID = 1
这样的事情。从该查询中选择Param1
和Param2
可以获得QlikView代码中$(Param1)
和$(Param2)
的必要值。
我现在正试图将我的QlikView代码转换为SSIS包,因为SSIS是一个专用的ETL工具,而QlikView并不是。我正在做的事情是什么?如果是这样,我将如何去做呢?
我的想法是将它全部包装在for循环容器中,并在它从此查询中抓取最后一个Param1
和Param2
后停止:
SELECT Param1, Param2
FROM ThisTable
WHERE SomeID = 1
基本上,我试图避免不得不写一千次我的第一个选择陈述。
谢谢。
如果我说的话没有意义,请告诉我,以便我再详细说明。
答案 0 :(得分:8)
我怀疑您正在执行SQL任务,因此,您只需在SQL任务组件中映射参数。
您必须首先创建一个执行此查询的SQL组件:
SELECT Param1, Param2
FROM ThisTable
WHERE SomeID = 1;
我已经嘲笑了SQLStatement,但其他一切看起来应该是这样的(不要忘记检查它是否有完整的数据集):
现在,为了对上面收集的每个值运行以下查询,我们可以使用foreach循环并迭代我们的数据集。在这个foreach循环中,我们将放置一个数据流任务,您将使用OLE DB作为源和平面文件作为目标,以便读取数据并将其放入csv文件中。 (在实际项目中我建议使用ODBC而不是OLE DB,它会更快)。
现在在dataflow任务中创建数据源,添加查询并将其参数化为:
最后,它看起来应该是那样的(红色突出显示的是数据流任务的内部组件):
当然,你必须添加一些日志记录或其他一些组件,但这是基本的,会让你感动。
答案 1 :(得分:0)