我有一个SQL查询正在SSIS中执行,以将数据加载到CSV文件中,如下所示:
SELECT *
FROM SomeTable
WHERE SomeDate BETWEEN '1-Jan-2016' AND '31-Dec-2016'
AND Param1 = 2 AND Param2 = 2
Run Code Online (Sandbox Code Playgroud)
当这是用QlikView编写的时候,我使用了这样的参数:
SELECT *
FROM SomeTable
WHERE SomeDate BETWEEN '1-Jan-2016' AND '31-Dec-2016'
AND Param1 = $(Param1) AND Param2 = $(Param2)
Run Code Online (Sandbox Code Playgroud)
现在我正在将整个任务迁移到SSIS,我正在弄清楚如何获得Param1和Param2将被动态分配.例如,在QlikView中,我创建了一个由另一个查询填充的表:
SELECT Param1, Param2
FROM ThisTable
WHERE SomeID = 1
Run Code Online (Sandbox Code Playgroud)
这样的事情.的选择Param1,并Param2从该查询得到我所需的值$(Param1),并$(Param2)在我的QlikView代码.
我现在正试图将我的QlikView代码转换为SSIS包,因为SSIS是一个专用的ETL工具,而QlikView则不是.我正在做什么?如果是这样,我将如何去做呢?
我的想法是将它全部包装在for循环容器中,并在它抓取最后一个Param1并Param2从此查询中停止:
SELECT Param1, Param2
FROM ThisTable
WHERE SomeID = 1
Run Code Online (Sandbox Code Playgroud)
基本上,我试图避免不得不写一千次我的第一个选择语句.
谢谢.
如果我说的话没有意义,请告诉我,这样我就可以详细说明了.
我怀疑你正在做一个SQL任务,因此,你只需要在SQL任务组件中映射参数.
您需要做的是首先创建一个执行此查询的SQL组件:
SELECT Param1, Param2
FROM ThisTable
WHERE SomeID = 1;
Run Code Online (Sandbox Code Playgroud)
我已经模拟了SQLStatement,但其他一切应该看起来像那样(不要忘记检查它是否有完整的数据集):

现在,为了对上面收集的每个值运行以下查询,我们可以使用foreach循环并迭代我们的数据集.在这个foreach循环中,我们将放置一个数据流任务,您将使用OLE DB作为源和平面文件作为目标,以便读取数据并将其放入csv文件中.(在实际项目中,我建议使用ODBC而不是OLE DB,它更快).
现在在dataflow任务中创建数据源,添加查询并将其参数化为:

最后,它看起来应该是那样的(红色突出显示的是数据流任务的内部组件):

当然,你必须添加一些日志记录或其他一些组件,但这是基本的,会让你感动.
| 归档时间: |
|
| 查看次数: |
4066 次 |
| 最近记录: |