使用SSIS导入多个.csv文件,每个文件都有唯一的列

时间:2016-07-18 16:26:50

标签: sql-server csv ssis

我一直在遇到创建SSIS项目的问题,该项目执行以下操作: 检查.csv文件的文件夹 - >对于每个csv文件 - >插入[db]。[每个.csv文件的名称]

数据库中的每个csv和相应的表都有自己唯一的列

我已经尝试过在许多写作中找到的foreach循环,但问题归结为平面文件连接。似乎期望每个csv文件与之前的文件具有相同的列,并且当没有显示此列名称时出错。

任何人都知道如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

每个平面文件格式都必须拥有自己的连接,因为连接告诉SSIS如何解释文件中包含的数据集。如果它不存在,那就像告诉SQL服务器你想要数据从数据库中而不是指定一个表或它的列。

我想您需要考虑的事情是如何告诉数据流任务源组件中的哪个列将映射到目标组件?它是否总是相同的列名?没有连接管理器,除非您动态地执行此操作,否则无法映射列。

你仍然有几种方法可以做你想做的事情,你只需要四处寻找,因为我知道这个主题有答案。

  • 您可以创建一个脚本任务并在.Net
  • 中进行导入
  • 您可以创建一个SQL脚本任务,并将BULK INSERT或OPENROWSET用于临时停滞表,然后使用动态sql映射并导入最终表。

答案 1 :(得分:0)

您可以查看BiML脚本,它根据可用的元数据动态创建和执行包。

答案 2 :(得分:0)

我在这里有两个选择。

1)Scrip组件,用于在sql server中动态创建表结构。

2)对于每个循环容器,使用EXECUTE SQL TASK和OPENROWSET子句。

答案 3 :(得分:0)

尝试使用以下列保留映射表 FileLocation 文件名 表名

在表格中添加所有细节。 为所有列名称创建用户变量&一个用于结果集。 使用Execute SQL task& amp;读取表中的数据。将它保存在单个结果集变量中。

In For循环容器变量映射将所有列映射到用户变量。

创建两个连接管理器,一个用于Excel&其他用于csv文件。 将CSV文件连接字符串传递为@ [User :: FileLocation] + @ [User :: FileName]

每个环形内部的内部使用大量插入物&分配源和&目标连接以及表名称为User :: TableName参数。

如果您需要任何详细信息,请发布,如果有用,我会尽力帮助您。