我正在尝试创建一个SSIS包,用于将数据子集带入单独的报告环境(基本上是从一个数据集市到另一个数据集市)。
我需要从多个表中获取数据,但是有1个初始源表可以用来过滤属于我组的记录。
我试图找出如何将第一个查询的结果用作后续查询的一部分。我有第一个查询,它只返回单列(LookupID值),但是它将有多行。
我的目标是使用LookupID值获取多个数据ODB Source / Destination包(每个表一个),以便为我获取相关记录。但是我似乎找不到本机的方法。
我的后盾只是获取所有新记录,然后在我的登台表中删除,但希望有另一种/更好的方法。
答案 0 :(得分:2)
有几种方法可以到达那里。
蛮力
在数据流任务(DFT)中,您可以在Lookup Transformation
中重复您的初始查询。查找支持多列结果集。将数据从“源”流到“查找”中,然后在Columns
选项卡上,选择输出。
中度优雅
如果在数据库中将初始查询捕获为VIEW
,则可以将该视图再次用作Lookup Transformation
的源。这样,如果基础查询需要改变,则只有一个地方可以维护它。
我可能会开始的方式
查找的问题是它们消耗内存。如果您的查找源是几百行,甚至几千行,那实际上不是问题。但是,如果您处理了3-5百万条记录,它可能会开始真正影响您的应用程序服务器并占用大量内存。
考虑到这一点,我将再次倾向于捕获视图中的逻辑,但随后在ODBC Source查询中加入该视图。这样一来,繁重的工作就转移到了专门用于完成此类工作的SQL Server盒上,而让SSIS可以处理数据传输,这在处理方面非常出色。
答案 1 :(得分:0)
您需要将第一次查找的结果存储到一个对象变量中,然后在以后的步骤中对其进行解析。最有可能是将数据放入一个对象变量(执行sql任务),然后为每个后续表的每个循环容器从该对象变量“查找”值的组合。我所描述的只是一个高层次,而没有实际涉及您的数据的详细信息。
如果您有大量数据,那么也许我会坚持Eric的最后一种方法。