SSIS - 根据第一列值从SQL表导出到多个平面文件

时间:2013-12-09 16:16:23

标签: sql dynamic foreach ssis export

以下是SQL表的示例:

Name    Class   Grade
Jesse   English A
Jesse   Math    C
Jesse   History A
Scott   Math    B
Scott   History B
Scott   English A
Mike    History A
Mike    English D

我正在尝试让SSIS为每个人动态创建一个平面文件。例如:

平面文件名: Jesse

Name    Class   Grade
Jesse   English A
Jesse   Math    C
Jesse   History A

平面文件名: Scott

Name    Class   Grade
Scott   Math    B
Scott   History B
Scott   English A

平面文件名: Mike

Name    Class   Grade
Mike    History A
Mike    English D

我可以轻松地在sql表和平面文件之间创建静态链接,但我计划在表中添加很多人,否则会导致我为每个人创建数据流任务。这不太理想。我希望为每个循环确定Name列中的不同值,然后将限定行输出到平面文件中。

2 个答案:

答案 0 :(得分:3)

这是你的包的样子:

in the control flow

in the data flow

右击 - >变量1.student - >对象                       2.students - >字符串(用于保存所有给你需要的学生的名字)结果

在数据流中 - 连接管理器 - 右键单击​​ - 平面文件连接 - >属性 - >表达式将其提及为:: "C:\\Users\\user\\Desktop\\ssis_stuff_from_stackoverflow\\citys.txt-"+ @[User::student] +".txt"

包成功执行影响3行并在folder path

中添加3个平面文件

here is one good example

答案 1 :(得分:2)

首先运行查询以查找唯一学生的记录集:

select distinct name from myTable

然后使用foreach循环循环并运行以下参数化查询:

SELECT class, grade 
FROM myTable 
WHERE name = ? 

使用派生列将名称包含在结果集中。

将其放在平面文件目的地。输出文件的连接字符串将是动态的。

这些是步骤。如果你遇到困难,可以在网上找到很多例子,或随意提问。