【发布时间】:2013-07-10 00:54:46
【问题描述】:
我只能找到在 OLE DB 源中使用临时表的解决方案。 但我找不到 ADO.NET 源的解决方案。如何在 SSIS 包中成功使用 ADo.NET 源中的临时表?
【问题讨论】:
标签: ssis
我只能找到在 OLE DB 源中使用临时表的解决方案。 但我找不到 ADO.NET 源的解决方案。如何在 SSIS 包中成功使用 ADo.NET 源中的临时表?
【问题讨论】:
标签: ssis
我发现在 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 源组件不同,您不能在数据流任务中设置此属性。
数据流工作完成后,返回控制流,查看Data Flow Task 的属性。将延迟验证从 false 更改为 true。这将防止在我们移除非临时表“脚手架”后触发任何设计时验证。接下来找到表达式并单击省略号 (...)。在下拉列表中,您应该看到 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 选项来显式描述临时表元数据,从而使自己更轻松。
【讨论】:
...view the properties of the Data Flow Task. Change the Delay Validation from false to true. 这正是阻碍我的原因。繁荣,现在它可以工作了。