【问题标题】:Saving results from Execute SQL Task to Excel将执行 SQL 任务的结果保存到 Excel
【发布时间】:2013-03-31 13:43:27
【问题描述】:

我正在尝试在 SSIS 中开发一个包。该包的逻辑比较简单:执行一个查询并将结果集保存在一个excel电子表格中。因此,我首先尝试创建如下所示的架构:-

我面临的问题是查询使用了临时表,而 OLE DB 源似乎无法解析包含临时表(#table-names)的查询。

所以我尝试在我的控制流中使用执行 SQL 任务。这似乎能够执行此查询。但现在我想获取整个结果集并将其保存在动态命名的 Excel 电子表格中。 我知道创建临时表是一种解决方案,但我不能使用它,因为客户不会对此感到高兴。 我尝试将结果集保存在一个变量中,但即使这样我也无法从 OLEDB 源中读取。 谁能给我这方面的建议。如果您需要任何澄清,请发表评论。

谢谢

【问题讨论】:

  • 你可以使用临时表吗?不创建临时表,而是截断临时表。其他一切都应该相同。
  • @Dan-> 没有朋友 :(。不允许在服务器上创建任何数据库对象
  • 你能让dba为你做吗?
  • 使用 Execute SQL Task 创建带有结果集的临时表。创建一个将保存结果集的变量。使用 Retainsameconnection 属性。在 OLEDB Source 中,将变量视为输入,它实际上是 Execute SQL Task 的输出。
  • @Zerotoinfinite -> 是的,你的方法是正确的

标签: sql sql-server ssis sql-server-2008-r2


【解决方案1】:

我会将临时表逻辑移动到公用表表达式 (CTE),例如

WITH CTE_temp AS (
<< select statement that populates your temporary table >>
)
SELECT
<< select statement from your temporary table>>
FROM CTE_temp

CTE 可以构建在其他 CTE 之上,并且可以是递归的。通过一些横向思考,它们涵盖了 99.9% 的临时表解决方案。

CTE 可以并行运行而不会出现争用问题。它们通常也比临时表解决方案更快。

【讨论】:

    【解决方案2】:

    这可以使用定义的连接管理器的“RetainSameConnection”属性来实现。 (当你创建临时变量时,临时变量在连接关闭时被删除......)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-27
      相关资源
      最近更新 更多