如何通过SSIS在1个存储过程中输出多个文件

how to output multiple files in 1 stored procedure via SSIS

我在 SQL Server 2008 和 BIDS 工作。由于一些性能问题,我正在重新设计我当前的架构。目前,我有一个存储过程,其中包含许多 INSERT INTO SELECT 语句。在我的新架构中,我试图获得 SSIS 的插入性能(而不是 SSMS 中的 INSERT INTO)。因此,我的新存储过程仍将包含所有 SELECT 语句(只是在每个语句之前没有 INSERT INTO)。我将在 SSIS 中调用此存储过程(提供 SELECTs 所需的一些参数)。我的目标是让每个 SELECT 写入单独的平面文件。 (实际上,SELECTS 的某些组将写入单独的平面文件,这样我只有几个——而不是十亿个——平面文件连接管理器。)我知道如何在 SISS 中执行存储过程并将多行集写入平面文件。但是,是否可以在 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 任务(或一系列任务)。

由于 SSIS 的严格元数据体系结构,无法使用数据流进行动态导出。但是您可以使用控制流任务来完成。您必须在执行流程任务中编写 BCP command 并为每个要导出的 table 调用它。

步骤:

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