如何在ssis中执行和保存sql参数化查询?

时间:2015-02-26 20:16:19

标签: sql-server ssis oledbcommand

我为此疯狂... 我有一个参数化查询从数据源中提取一些信息,但首先,我通过OLE DB Source获取我需要进行查询的那些参数,我需要进行查询并保存参数和结果y我的事实表

更多解释,我有项目和日期,我的维度,我需要一个指标,我的事实,一个查询的结果(我有在sql服务器中运行的查询),它具有项目和日期的参数,并返回指标。 我的ETL想法是这样的:Ole DB Source - > Ole DB Command(因为它支持参数化查询) - > Ole DB目的地

但我发现,OLE DB命令没有输出,我一直在尝试其他方式,但我不知道如何,请帮助! 安贝尔

2 个答案:

答案 0 :(得分:0)

如果您的第一个OLE DB只返回一个Project和一个Date,需要传递给第二个查询(您的OLE DB命令),那么我建议:

  1. 在控制流程(不是数据流任务)
  2. 创建两个变量:v_project,v_date

  3. 在控制流中使用执行SQL任务     选择myproject,mydate FROM A. 在执行SQL任务中:      - 常规选项卡,将'ResultSet'设置为'Single Row'      - 结果设置选项卡将myproject发送到v_project并将mydate发送到v_date

  4. 将执行SQL任务连接到数据流任务,因此它将首先运行并填充变量。

  5. 在您的数据流任务中:  从Ole DB Source开始   写下您的查询以接受参数       SELECT * FROM B WHERE project =?和projectdate =?   在“参数”中设置每个参数以使用您之前创建的变量。

  6. 6继续执行数据流任务,直到目的地为止。

    注意:由于问题不具体,所以这个答案假设您只想传入1个项目和1个日期。如果您需要传递多个项目/日期组合,那么还有其他答案。当我需要为ETL项目提取最后一个加载日期时,我一直使用这种方法。

答案 1 :(得分:0)

经过大量的工作后,我做了CognitiveBI的建议,但我使用了一个for循环容器来重复我需要的所有时间,

首先,我使用了一个容器,其数据流保存在阶段表中,所有项目和日期组合,以及每行的当前行等于1,

其次,我为第一行做了当前等于1的程序,我使用Execute Sql Task Component,使用变量作为CognitiveBi建议。

第三,我将我的sql任务包含在一个循环容器中,并按照此处所说的配置http://www.sqlis.com/post/For-Loop-Container-Samples.aspx,为我的项目循环,我的上一个sql任务,将当前行放到o,所以下一次迭代,继续下一行。

最后,我创建了另一个容器来提取舞台表的数据,最后我删除了舞台表, 它找到了我的工作,感谢我带来解决方案的想法, 安娜贝尔