【问题标题】:how to output multiple files in 1 stored procedure via SSIS如何通过SSIS在1个存储过程中输出多个文件
【发布时间】:2016-10-11 23:25:34
【问题描述】:

我正在使用 SQL Server 2008 和 BIDS。由于一些性能问题,我正在重新设计我当前的架构。目前,我有一个存储过程,其中包含许多 INSERT INTO SELECT 语句。在我的新架构中,我试图获得 SSIS 的插入性能(而不是 SSMS 中的 INSERT INTO)。因此,我的新存储过程仍将包含所有 SELECT 语句(只是在每个语句之前没有 INSERT INTO)。我将在 SSIS 中调用这个存储过程(提供一些 SELECT 所需的参数)。我的目标是让每个 SELECT 写入单独的平面文件。 (实际上,某些 SELECTS 组将写入单独的平面文件,因此我只有几个——而不是十亿个——平面文件连接管理器。)我知道如何在 SISS 中执行存储过程并让它编写一个多行设置为平面文件。但是,是否可以在 SSIS 中执行 1 个存储过程来将多个多行集写入多个平面文件?如果可以,怎么做?

【问题讨论】:

  • 如果提高性能是您的主要目标,最好单独进行选择,使每个选择都成为其自己的数据流的来源。这样你就有了并行处理。但是,如果集中代码比性能更重要,那么可能有一些方法。
  • 让每个 SELECT 成为其自己的数据流的源在开发时间上的成本太高,因为我有大约 500 个 SELECT 语句。

标签: sql-server ssis


【解决方案1】:

您可以让一个存储过程写入任意数量的文件。请看Phil Factor的这篇文章,https://www.simple-talk.com/sql/t-sql-programming/reading-and-writing-files-in-sql-server-using-t-sql/

但是,您正在失去 SSIS 的所有功能 - 例如错误行的重定向、日志记录、并行处理。你需要做的听起来像是一个完美的 SSIS 任务(或一系列任务)。

【讨论】:

    【解决方案2】:

    由于 SSIS 的严格元数据架构,无法使用数据流进行动态导出。但是您可以使用控制流任务来完成。您必须在 Execute Process Task 中写入 BCP command 并为您要导出的每个表调用它。

    步骤:

    1. 调用select * from information_schema.tables并将结果集抓取到变量中
    2. 使用 foreach Loop 任务循环遍历表
    3. 使用执行流程任务在循环中调用 BCP。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      相关资源
      最近更新 更多