我只能在OLE DB源中找到使用临时表的解决方案。 但我找不到ADO.NET源码的解决方案。如何在SSIS包中的ADo.NET源中成功使用临时表?
答案 0 :(得分:3)
我觉得在SSIS中使用临时表会比通常更值得痛苦。我希望你的经历更好。
创建ADO.NET连接。在Connection Manager的属性中,将RetainSameConnection的值从false
设置为true
。这将允许创建的临时表在包执行期间存在,方法是阻止连接池交换线程。
我的麻烦来自于正确设置元数据。为了解决这个问题,我创建了一个变量QuerySource
,用于查询反映临时表外观的物理表。 SELECT S.src_id, S.src_value FROM dbo.SRC AS S;
这允许数据流为下游组件建立正确的元数据。我在ADO.NET源中手动使用此查询。完成后,我需要更改查询以使用临时表##SRC
。与OLE DB Source组件不同,您无法在数据流任务中设置此属性。
完成数据流工作后,返回控制流程,查看Data Flow Task
的属性。将延迟验证从false
更改为true
。这将阻止在我们删除非临时表“scaffolding”时需要进行的任何设计时验证。接下来找到表达式并单击省略号(...)。在下拉列表中,您应该看到ADO.NET源的名称。我已经重命名了,所以我在下拉列表中看到[ADONET Src]。[TableOrViewName]和[ADONET Src]。[SqlCommand]。我选择了[ADONET Src]。[SqlCommand],作为我的价值,我使用了@[User::SrcQuery]
。
我运行包以确保它仍然有效。它做了。然后我将查询的值更改为SELECT S.src_id, S.src_value FROM ##SRC AS S;
我重申,这次它正确地从临时表中提取数据。
如果您使用SQL Server 2012作为源代码,则可以使用EXECUTE语句的WITH RESULT SETS选项显式描述临时表元数据,从而使自己更容易。