如何使用SSIS包拆分表数据的单独名称Excel文件?

时间:2018-09-18 14:41:39

标签: ssis

我正在处理来自SQL Server的一组数据,这些数据我想进入一组Excel文件。此任务需要自动化以每月运行。数据看起来像 sk需要自动化才能每月运行。数据看起来像

Site    ID      FirstName   LastName
------  ------- ---------   ---------
North   111     Jim         Smith
North   112     Tim         Johnson
North   113     Sachin      Tedulkar
South   201     Horatio     Alger
South   205     Jimi        Hendrix
South   215     Bugs        Bunny

我希望结果看起来像

In Excel file named **North.xls**

ID      FirstName   LastName
111     Jim         Smith
112     Tim         Johnson
113     Sachin      Tedulkar

In Excel file named **South.xls**

ID      FirstName   LastName
201     Horatio     Alger
205     Jimi        Hendrix
215     Bugs        Bunny

我想在“网站”列中分配70至100个值。我正在使用SSIS执行此任务,但是在使用OLE DB Source任务从SQL Server中提取数据后,我陷入了困境。接下来应该做什么?如果有使用其他工具进行此操作的简便方法,我也愿意接受。

1 个答案:

答案 0 :(得分:2)

您可以创建一个执行SQL任务,该任务在“站点”列上执行SELECT DISTINCT,并将值存储在对象变量中。 在下一步中,您将构建一个Foreach循环容器,该容器将迭代对象变量。

Foreach循环容器具有一个数据流任务。在数据流中,您有一个ADO.NET源,为SQL语句构建了一个表达式。 在表达式中,您可以构建一个动态的SELECT,在其中,Part可以限制到当前迭代。 将数据流重定向到平面文件目标。在平面文件目标位置的表达式中,您可以使用当前迭代来命名文件。

有什么问题吗?您需要截图吗?

更新

有关屏幕截图的详细说明:

  1. 创建执行SQL任务:

enter image description here

它应该返回完整的结果集,并在SQLStatment属性中的“站点”列中写入SELECT Distinct查询。

enter image description here

将结果定义为“ 0”,并将其映射到类型为Object的变量。

  1. 创建一个Foreach循环容器:

enter image description here 将枚举器设置为“ Foreach ADO枚举器”,然后在“ ADO对象源变量”组合框中选择您在第1部分中已经定义的变量。

enter image description here

在结果集中映射一个字符串类型的新变量。此变量是循环中对象变量的迭代。

  1. 现在,您将数据流任务放置在ForEachLoop容器中。

您可以使用“ OLE DB源”或“ ADO NET源”作为数据源。

  1. 我将解释“ ADO NET Source”:

将此构造添加到您的数据流:

enter image description here

像这样配置ADO.NET资源:

enter image description here

  1. 将表达式添加到ADO.NET源:

打开表达式编辑器,然后选择属性[ADO NET Source]。[SQLCommand]。在此表达式编辑器中,您可以构建动态SQL查询。

表达非常有力。这是文档:https://docs.microsoft.com/en-us/sql/integration-services/expressions/integration-services-ssis-expressions?view=sql-server-2017

表达式应如下所示:

    "SELECT [Site]
      ,[ID]
      ,[FirstName]
      ,[LastName]
FROM [Test].[dbo].[Sites]
where Site =  '" + @[User::sIterator] + "'"

现在,每循环一次,sql-query就会选择另一个站点。

  1. 使用表达式使FileName动态化。

为“平面文件目标”创建连接管理器。 选择连接管理器的Expression属性,就像我们之前在第5部分中对数据流任务所做的那样。

enter image description here

现在为属性“ ConnectionString”构建表达式。 ConnectionString是包含文件名的完整路径。

"E:\\" +  @[User::sIterator] + ".csv"

别忘了您必须用“ \”来表达“ \”。因此,请始终输入“ \\”而不是“ \”。