如何在ssis中加载包含多个文件的特定列

时间:2019-08-27 06:00:50

标签: ssis ssis-2012

如何使用Ssis软件包仅将多个文件中的idname列加载到sql server中?

每个文件具有不同的结构,但所有文件中都具有这两个必需的列。每个文件之间的列顺序是不同的。

源文件文件夹为:D:\ SourceFolder

文件如下:

File1 Name : Emp_20190102
Emp_20190102 File data :
id,sal,deptno,name
1,100,10,h

File2 Name : Emp_20190102_1
Emp_20190102_1 File data :
id,name,sal
11,ac,101

File3 Name : Emp_20190102_2
Emp_20190102_2 FIle Data 
id,sal,name,deptno,loc
3,200,y,30,che
File4 Name : Emp20190102
Emp20190102 FIle Data:
id,sal,deptno,dname,flag,name
10,400,40,hr,1,un

在这里,我只想将id和name列信息加载到sql server表中。 sql表结构:

CREATE TABLE [dbo].[Emp](
    [id] [int] NULL,
    [name] [varchar](50) NULL
)

enter image description here

基于以上我要在emp表中加载数据的4个文件

id |Name
1  |h
11 |ac
3  |y
10 |un

这是我尝试过的:

步骤1:为文件夹名称和文件名创建2个变量 文件位置:D:\ SourceFolder 文件名:Emp_20190102_1.txt

然后拖放foreachloop容器并选择typeofenumerator:foreach fileenumerator 和变量映射:文件名变量 并在内部拖放平面文件源并配置源文件 在创建平板文件连接的动态连接之后 然后拖放oledb目标并进行配置

执行软件包后,我得到了错误的结果。 在这里,我们应该只使用一个数据流任务来加载所有文件

能否请您告诉我如何在sis中实现一个程序包来实现此任务?

1 个答案:

答案 0 :(得分:1)

您不能在循环中使用单个数据流来执行此操作。由于所有文件的结构都不同,因此您必须为每个文件创建一个单独的数据流。

这是因为必须在设计时设置数据流的元数据。它不能是动态的。此外,对于平面文件源,不能像在OLEDB源中那样仅选择源中想要的列。

使用单个数据流执行此操作的唯一方法是,如果所有文件都具有完全相同的顺序完全相同的列。