对于每个循环输出.csv文件为每个.csv文件分配变量名称

时间:2016-09-15 11:00:20

标签: sql-server ssis

我是每个循环的新手。我希望为表中的每个发票创建.csv文件,然后为每个.csv分配一个表中的相应发票号。根据我的理解,我需要在每个循环中创建一个数据流任务并输出.csv文件。我在为每个发票变量循环时遇到问题,并将.csv重命名为该发票。我非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

总之,您需要将包含发票编号列表的整个数据集保存为对象,然后创建一个容器以循环该数据集并从每行填充一个或多个简单变量(例如,整数,字符串)。您在容器中添加的任何任务将每行执行一次,并且可以使用存储在变量中的值。在这种情况下,因为您希望输出文件名从数据集派生,所以您需要使用全局变量和连接管理器以及基于这些变量的表达式。

建议以下步骤:

  1. 创建一个Object类型的变量,例如的 @InvoiceResults
  2. 创建一个变量以包含发票号,例如的 @InvoiceNumber 即可。需要全局创建此变量(即不在特定任务中),因为您的平面文件连接管理器将使用它。
  3. 创建另一个全局字符串变量以包含文件名,例如的 @InvoiceFileName 即可。设置表达式以从 @InvoiceNumber 变量构建文件名,例如 001 - >的 C:\ Invoice_001.csv
  4. 创建文件连接管理器。点击 F4 以显示属性屏幕,并将 FileName 表达式设置为 @InvoiceFileName 变量。
  5. 创建执行SQL任务以检索发票编号。选择完整结果集输出类型,然后切换到结果集标签并指定对象变量(例如 @InvoiceResults )。此任务将执行查询并将结果存储在稍后要使用的对象中。
  6. 创建 Foreach循环容器以在执行SQL任务之后运行。在收藏集标签上,选择 Foreach ADO枚举器并指定对象变量,例如的 @InvoiceResults 即可。在变量映射标签上,添加 @InvoiceNumber 变量。这告诉容器迭代对象的内容并为每一行填充此变量。此容器中的任何任务现在每行运行一次,并且可以使用该变量来获取发票号。
  7. 在容器中创建数据流任务。假设您需要一个数据源来检索单个发票的数据,使用 @InvoiceNumber 作为参数,然后使用您在上面创建的连接管理器将其发送到平面文件目标。由于平面文件目标使用foreach容器内部的连接管理器,因此连接应指向从发票号中派生的文件名。
  8. 有一个图片here的教程(不是由我制作的)。