如何使用Ssis软件包仅将多个文件中的id
和name
列加载到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
)
基于以上我要在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中实现一个程序包来实现此任务?
答案 0 :(得分:1)
您不能在循环中使用单个数据流来执行此操作。由于所有文件的结构都不同,因此您必须为每个文件创建一个单独的数据流。
这是因为必须在设计时设置数据流的元数据。它不能是动态的。此外,对于平面文件源,不能像在OLEDB源中那样仅选择源中想要的列。
使用单个数据流执行此操作的唯一方法是,如果所有文件都具有完全相同的顺序完全相同的列。