我正在处理来自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中提取数据后,我陷入了困境。接下来应该做什么?如果有使用其他工具进行此操作的简便方法,我也愿意接受。
答案 0 :(得分:2)
您可以创建一个执行SQL任务,该任务在“站点”列上执行SELECT DISTINCT,并将值存储在对象变量中。 在下一步中,您将构建一个Foreach循环容器,该容器将迭代对象变量。
Foreach循环容器具有一个数据流任务。在数据流中,您有一个ADO.NET源,为SQL语句构建了一个表达式。 在表达式中,您可以构建一个动态的SELECT,在其中,Part可以限制到当前迭代。 将数据流重定向到平面文件目标。在平面文件目标位置的表达式中,您可以使用当前迭代来命名文件。
有什么问题吗?您需要截图吗?
更新:
有关屏幕截图的详细说明:
它应该返回完整的结果集,并在SQLStatment属性中的“站点”列中写入SELECT Distinct查询。
将结果定义为“ 0”,并将其映射到类型为Object的变量。
将枚举器设置为“ Foreach ADO枚举器”,然后在“ ADO对象源变量”组合框中选择您在第1部分中已经定义的变量。
在结果集中映射一个字符串类型的新变量。此变量是循环中对象变量的迭代。
您可以使用“ OLE DB源”或“ ADO NET源”作为数据源。
将此构造添加到您的数据流:
像这样配置ADO.NET资源:
打开表达式编辑器,然后选择属性[ADO NET Source]。[SQLCommand]。在此表达式编辑器中,您可以构建动态SQL查询。
表达式应如下所示:
"SELECT [Site]
,[ID]
,[FirstName]
,[LastName]
FROM [Test].[dbo].[Sites]
where Site = '" + @[User::sIterator] + "'"
现在,每循环一次,sql-query就会选择另一个站点。
为“平面文件目标”创建连接管理器。 选择连接管理器的Expression属性,就像我们之前在第5部分中对数据流任务所做的那样。
现在为属性“ ConnectionString”构建表达式。 ConnectionString是包含文件名的完整路径。
"E:\\" + @[User::sIterator] + ".csv"
别忘了您必须用“ \”来表达“ \”。因此,请始终输入“ \\”而不是“ \”。