SSIS:需要在数据的其他SQL查询中使用SQL查询结果
我正在尝试创建一个SSIS包,用于将数据子集引入一个单独的报告环境(基本上是从一个数据集市引入另一个数据集市) 我需要从多个表中获取数据,但有一个初始源表用于筛选属于我的组的记录 我试图弄清楚如何将第一个查询的结果作为后续查询的一部分使用。我的第一个查询只返回一列(LookupID值),但它将有多行 我的目标是使用LookupID值创建多个数据ODB源/目标包(每个表一个),以便为我获取相关记录。但我似乎找不到一种方法来实现这一点SSIS:需要在数据的其他SQL查询中使用SQL查询结果,sql,sql-server,ssis,Sql,Sql Server,Ssis,我正在尝试创建一个SSIS包,用于将数据子集引入一个单独的报告环境(基本上是从一个数据集市引入另一个数据集市) 我需要从多个表中获取数据,但有一个初始源表用于筛选属于我的组的记录 我试图弄清楚如何将第一个查询的结果作为后续查询的一部分使用。我的第一个查询只返回一列(LookupID值),但它将有多行 我的目标是使用LookupID值创建多个数据ODB源/目标包(每个表一个),以便为我获取相关记录。但我似乎找不到一种方法来实现这一点 我的退路只是获取所有新记录,然后在我的暂存表中删除,但我希望有另
我的退路只是获取所有新记录,然后在我的暂存表中删除,但我希望有另一种/更好的方法。有几种方法可以实现 暴力 在数据流任务(DFT)中,您可以在
查找转换中重复初始查询。查找支持多列结果集。将数据从源流向查找,然后在列
选项卡上选择输出
适度优雅
如果将初始查询捕获为数据库中的视图
,则可以再次将该视图用作查找转换的源。这样,如果基础查询需要更改,您只有一个地方可以维护它
我可能开始的方式
查找的问题是它们会消耗内存。如果您的查找源代码只有几百行,甚至几千行,那么这并不是一个真正的问题。但是,如果你有超过,比如说,300-500万条记录,它会开始真正影响你的应用服务器,并使内存紧张
考虑到这一点,我再次倾向于在视图中捕获逻辑,但随后在ODBC源查询中加入视图。这就把繁重的工作转移回了SQL Server box上,而SQL Server box正是为了完成这类工作而设计的,而SSI则负责处理数据传输,它在处理数据传输方面非常出色。您需要将第一次查找的结果存储到一个对象变量中,然后在以后的步骤中解析它。最有可能的方法是将数据放入一个对象变量(执行sql任务),然后为每个后续表的每个循环容器“查找”该对象变量的值。这是我在描述的唯一一个高层次的内容,而没有真正深入了解您的数据的细节
如果您有大量数据,那么我可能会坚持Eric的最后一种方法。如果您可以在联接中使用源表,这将是理想的方法。您可以在单个查询中为加入初始源?的每个源创建多个视图是。但是,我必须将其作为SSI中的一个非常大的数据集返回,然后可能将其从一个ODB源拆分到多个ODB目标,并将数据拆分到它应该转到的每个表中。我还担心将所有表合并到一个查询中会有很好的效果。我也无法在源服务器上创建自定义视图。暴力:是否需要对我要检查的每个表都这样做?我将对此进行研究,尽管听起来好像是在推送数据,然后在SSIS中进行比较?也许我理解错了,今天晚些时候我可以试着看看查找转换。稍微优雅一点/开始方式:不幸的是,这是整个公司使用的一个非常大的中央数据集市,我没有权限添加/修改它(即:创建视图),这是我将数据复制到另一台我有更多控制权的服务器的部分原因。是的,必须对每个表执行暴力方式。乏味的您可以提取第一个查询并使用它填充目标数据库中的表,然后将该表用作所有查找的基础。SSIS的优势之一是它能够跨服务器工作(通过将所有数据拉到应用服务器上,但完全相同…),我正在寻找更多的方法来利用查询中的初始记录集/对象。循环太慢和乏味。即使是那天的一个小数据集,将所有数据拉到其他SQL server并在我设置的暂存架构中清理那里的记录仍然会更有效。我希望有一种方法可以在其他部分中使用第一个对象/记录集作为查询的一部分。当我努力用谷歌搜索它时,我有点假设这可能是不可能的,但我想检查一下以防万一。