Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SSIS中的公共表、不同文件和不同文件结构_Sql Server_Ssis - Fatal编程技术网

Sql server SSIS中的公共表、不同文件和不同文件结构

Sql server SSIS中的公共表、不同文件和不同文件结构,sql-server,ssis,Sql Server,Ssis,我有多个平面文件作为源文件。每个文件都有一些公共列。但其中一个也有一些额外的列。我需要将所有的数据从平面文件移动到一个只有公共列的表中,并跳过其中一个文件中的额外列。结构示例如下: 文件1的结构: id, name, age 文件2的结构: id, name, age, address, country 文件3的结构: id, name, age, address 表的结构: id, name, age 我只想为文件之间的三个公共列填充表。我需要忽略休息。如何使用SSIS实现这一点?简单

我有多个平面文件作为源文件。每个文件都有一些公共列。但其中一个也有一些额外的列。我需要将所有的数据从平面文件移动到一个只有公共列的表中,并跳过其中一个文件中的额外列。结构示例如下:

文件1的结构:

id, name, age
文件2的结构:

id, name, age, address, country
文件3的结构:

id, name, age, address
表的结构:

id, name, age

我只想为文件之间的三个公共列填充表。我需要忽略休息。如何使用SSIS实现这一点?

简单。设置3个数据流任务,每个任务连接到不同的文件。每一个都写入同一个表(例如,通过OLEDB目标)。对于除File1(与表结构匹配)之外的所有列,只需不映射OLEDB目的地中多余的、不需要的列(即地址、国家)。这些列中的值将被丢弃,而不会进入表中。

您需要一个for-each循环来遍历平面文件所在的文件夹

只要您想要的列在每个文件中都处于相同的位置,那么所有这些都应该是好的


请看一看。

您需要在不同的文件夹中分离不同类型的文件(您可以在SSI中使用文件系统任务通过匹配文件名等进行分离,或者在powershell中进行分离)。每个文件夹中的文件必须具有相同的列数和名称/类型。然后为每个文件夹创建for each循环,并遍历以从所需列中获取数据,并将它们加载到目标表中。您可能需要最后一步(执行sql)来删除目标表中的重复项。

有多少个平面文件?这可能会有所不同。没有固定数量的文件。有时可能只有一个,有时可能是6个、7个或10个。。。。它可以是已知或未知文件中的“n”个文件公共列数?它们是已知的。。。但是拼写可能不同。。。虽然这些职位仍然是萨米人,但我面临着类似的挑战。唯一的区别是我的目标表包含所有这些列(就像所有列的超集)。我的要求是填充每个文件可用的任何内容,并在目标中保留其他列为空。有人做过到公共目标表的动态映射吗?以上三个文件只是为了说明。每次我尝试的时候,文件的数量可能会有所不同。。。它不起作用了。。。。在具有额外字段的文件中,由于行分隔符定义为CRLF,因此它将这些字段的数据作为一个字段。您认为“这些字段的数据”是什么意思,即它将前9个字段考虑到表中相应的9个字段中。。。但是从有额外列的文件中,它会将数据从第10、11和12字段带入第10列。有几个选项-但可能最简单的一个是在完成导入和修剪最后一列后有一个派生列?它是固定长度的吗?是否有一个分隔符可以使用?如果它将多个列连接到第10列中,那当然没关系。您只导入前9列,因此之后的所有内容都会被丢弃。