如何在ssis中执行并保存sql参数化查询?
How to execute and save sql parameterized query in ssis?
我快被这个搞疯了...
我有一个参数化查询来从数据源中提取一些信息,但首先,我通过 OLE DB 源获取我需要进行查询的那些参数,我需要进行查询并保存参数和结果 y 我的事实table.
更多解释,我有项目和日期,我的维度,我需要一个指标,我的事实,查询的结果(我有查询它在 sql 服务器中工作)作为参数的项目和日期,以及 returns 指标。
我的 ETL 想法是这样的:Ole DB Source -> Ole DB Command(因为它支持参数化查询) -> Ole DB Destination
但我发现,OLE DB 命令没有输出,我一直在尝试其他方法,但我不知道如何,请帮助!!!
安娜贝尔
如果您的第一个 OLE DB 只返回一个项目和一个日期,需要将其传递给第二个查询(您的 OLE DB 命令),那么我建议:
- 在控制流中(不是数据流任务)
创建两个变量:v_project、v_date
在控制流中使用执行 SQL 任务
SELECT myproject, mydate 来自 A
在执行 SQL 任务中:
-- 常规选项卡,将 'ResultSet' 设置为 'Single Row'
-- 结果设置选项卡将 myproject 发送到 v_project 并将 mydate 发送到 v_date
将执行 SQL 任务连接到您的数据流任务,因此它将首先 运行 并填充变量。
在您的数据流任务中:
从 Ole DB 源开始
编写您的查询以接受参数
SELECT * 从 B WHERE 项目 = ?和项目日期=?
在 'Parameters' 中,将每个设置为使用您之前创建的变量。
6 继续执行数据流任务,直到到达目的地。
注意:由于问题不具体,此答案假设您只想传递 1 个项目和 1 个日期。如果您需要传递多个 project/date 组合,那么还有其他答案。当我需要为 ETL 项目提取最后加载日期时,我一直使用这种方法。
经过大量工作后,我按照 CognitiveBI 的建议进行操作,但我使用 for 循环容器在我需要的所有时间重复该过程,
首先,我使用了一个带有数据流的容器,该容器保存在一个阶段 table,我所有的项目和日期组合,以及每行等于 1 的当前行,
其次,我对当前等于 1 的第一行执行了程序,我使用执行 Sql 任务组件完成了所有操作,使用 CognitiveBi 建议的变量。
第三,我将所有 sql 任务包含在一个循环容器中,并按照此处所述进行配置,http://www.sqlis.com/post/For-Loop-Container-Samples.aspx,以循环我的项目,我的最后一个 sql 任务, 将当前行放入 o,因此下一次迭代与下一行一起进行。
最后,我制作了另一个容器来为阶段 table 提取数据,最后我擦除阶段 table,
它对我有用,感谢您提出的解决方案的想法,
安娜贝尔
我快被这个搞疯了... 我有一个参数化查询来从数据源中提取一些信息,但首先,我通过 OLE DB 源获取我需要进行查询的那些参数,我需要进行查询并保存参数和结果 y 我的事实table.
更多解释,我有项目和日期,我的维度,我需要一个指标,我的事实,查询的结果(我有查询它在 sql 服务器中工作)作为参数的项目和日期,以及 returns 指标。 我的 ETL 想法是这样的:Ole DB Source -> Ole DB Command(因为它支持参数化查询) -> Ole DB Destination
但我发现,OLE DB 命令没有输出,我一直在尝试其他方法,但我不知道如何,请帮助!!! 安娜贝尔
如果您的第一个 OLE DB 只返回一个项目和一个日期,需要将其传递给第二个查询(您的 OLE DB 命令),那么我建议:
- 在控制流中(不是数据流任务)
创建两个变量:v_project、v_date
在控制流中使用执行 SQL 任务 SELECT myproject, mydate 来自 A 在执行 SQL 任务中: -- 常规选项卡,将 'ResultSet' 设置为 'Single Row' -- 结果设置选项卡将 myproject 发送到 v_project 并将 mydate 发送到 v_date
将执行 SQL 任务连接到您的数据流任务,因此它将首先 运行 并填充变量。
在您的数据流任务中: 从 Ole DB 源开始 编写您的查询以接受参数 SELECT * 从 B WHERE 项目 = ?和项目日期=? 在 'Parameters' 中,将每个设置为使用您之前创建的变量。
6 继续执行数据流任务,直到到达目的地。
注意:由于问题不具体,此答案假设您只想传递 1 个项目和 1 个日期。如果您需要传递多个 project/date 组合,那么还有其他答案。当我需要为 ETL 项目提取最后加载日期时,我一直使用这种方法。
经过大量工作后,我按照 CognitiveBI 的建议进行操作,但我使用 for 循环容器在我需要的所有时间重复该过程,
首先,我使用了一个带有数据流的容器,该容器保存在一个阶段 table,我所有的项目和日期组合,以及每行等于 1 的当前行,
其次,我对当前等于 1 的第一行执行了程序,我使用执行 Sql 任务组件完成了所有操作,使用 CognitiveBi 建议的变量。
第三,我将所有 sql 任务包含在一个循环容器中,并按照此处所述进行配置,http://www.sqlis.com/post/For-Loop-Container-Samples.aspx,以循环我的项目,我的最后一个 sql 任务, 将当前行放入 o,因此下一次迭代与下一行一起进行。
最后,我制作了另一个容器来为阶段 table 提取数据,最后我擦除阶段 table, 它对我有用,感谢您提出的解决方案的想法, 安娜贝尔