1

我只能找到在 OLE DB 源中使用临时表的解决方案。但我找不到 ADO.NET 源的解决方案。如何在 SSIS 包的 ADo.NET 源中成功使用临时表?

4

1 回答 1

4

我发现在 SSIS 中使用临时表比它们通常值得更痛苦。我希望你的体验会更好。

创建 ADO.NET 连接。在 Connection Manager 的属性中,将 RetainSameConnection 的值从 设置falsetrue。通过防止连接池换出线程,这将允许创建的临时表在包执行期间存在。

我的麻烦在于正确设置元数据。为了解决这个问题,我创建了一个变量 ,QuerySource它查询一个反映临时表外观的物理表。SELECT S.src_id, S.src_value FROM dbo.SRC AS S;这允许数据流为下游组件建立正确的元数据。我在 ADO.NET 源代码中手动使用此查询。完成后,我将需要更改查询以使用临时表##SRC. 与 OLE DB 源组件不同,您不能在数据流任务中设置此属性。

数据流工作完成后,返回控制流,查看Data Flow Task. 将延迟验证从更改falsetrue。这将防止在我们移除非临时表“脚手架”后触发任何设计时验证。接下来找到表达式并单击省略号 (...)。在下拉列表中,您应该看到 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选项来显式描述临时表元数据,从而使自己更轻松。

于 2013-07-10T02:16:28.630 回答