SSIS:需要在其他SQL查询中使用SQL查询结果获取数据

时间:2019-03-07 21:51:50

标签: sql sql-server ssis

我正在尝试创建一个SSIS包,用于将数据子集带入单独的报告环境(基本上是从一个数据集市到另一个数据集市)。

我需要从多个表中获取数据,但是有1个初始源表可以用来过滤属于我组的记录。

我试图找出如何将第一个查询的结果用作后续查询的一部分。我有第一个查询,它只返回单列(LookupID值),但是它将有多行。

我的目标是使用LookupID值获取多个数据ODB Source / Destination包(每个表一个),以便为我获取相关记录。但是我似乎找不到本机的方法。

我的后盾只是获取所有新记录,然后在我的登台表中删除,但希望有另一种/更好的方法。

2 个答案:

答案 0 :(得分:2)

有几种方法可以到达那里。

蛮力

在数据流任务(DFT)中,您可以Lookup Transformation中重复您的初始查询。查找支持多列结果集。将数据从“源”流到“查找”中,然后在Columns选项卡上,选择输出。

中度优雅

如果在数据库中将初始查询捕获为VIEW,则可以将该视图再次用作Lookup Transformation的源。这样,如果基础查询需要改变,则只有一个地方可以维护它。

我可能会开始的方式

查找的问题是它们消耗内存。如果您的查找源是几百行,甚至几千行,那实际上不是问题。但是,如果您处理了3-5百万条记录,它可能会开始真正影响您的应用程序服务器并占用大量内存。

考虑到这一点,我将再次倾向于捕获视图中的逻辑,但随后在ODBC Source查询中加入该视图。这样一来,繁重的工作就转移到了专门用于完成此类工作的SQL Server盒上,而让SSIS可以处理数据传输,这在处理方面非常出色。

答案 1 :(得分:0)

您需要将第一次查找的结果存储到一个对象变量中,然后在以后的步骤中对其进行解析。最有可能是将数据放入一个对象变量(执行sql任务),然后为每个后续表的每个循环容器从该对象变量“查找”值的组合。我所描述的只是一个高层次,而没有实际涉及您的数据的详细信息。

如果您有大量数据,那么也许我会坚持Eric的最后一种方法。