SSIS CSV到SQL:具有不同列集的不同文件

时间:2018-03-13 18:15:12

标签: ssis

我有一个SSIS包,其中来自多个CSV文件的数据被加载到SQL Server。问题不是所有文件都有相同的列集,很少有文件没有数据库中的所有列w.r.t表。当我使用foreach循环运行包时,如果csv文件中没有cloumn(根据提供的映射预期),则会抛出错误。如何克服这种情况?

2 个答案:

答案 0 :(得分:0)

研究使用BiML,它根据可用的元数据在执行时动态构建包。因此,它会查看CSV文件中的列,并构建与CSV中的列匹配的数据流。

答案 1 :(得分:0)

不幸的是,SSIS使用每种文件类型的静态元数据(列信息)。因此,尝试将错误的文件加载到特定的csv格式将始终发生冲突和失败。您必须为正在使用的每种文件格式创建DataFlow任务。那么问题是何时使用哪个。

您可以尝试以下方法:

  1. 在尝试处理之前,确定哪种格式与哪个文件匹配 它。也许文件名或它的位置可以确定哪种格式 它有。然后,您可以使用条件表达式来切换 控制流程到相应的csv格式。
  2. 使用脚本任务(如c#)确定它具有的格式。您可以使用自定义代码来解释csv标头名称并将其与您的一种格式匹配,然后更新一个SSIS变量,该变量将控制流切换为该特定文件的格式。
  3. 您可以级联控制流,以便在尝试使用第一个csv格式失败时,它会自动尝试使用第二个,依此类推。但是,很难从格式错误中区分出正确的文件与某些错误(如奇怪的字符或缺少行的列分隔符)。

  4. 您可以尝试使用脚本任务(如c#)将所有格式统一为标准格式。这仅适用于文件包含相同类型的信息或实体的情况。

  5. 您可以使用脚本任务(如c#)直接处理任何文件。这将是一种矫枉过正,你几乎可以覆盖SSIS文件处理的好处。
  6. 我会尝试按顺序实现它们。

    如果您需要考虑的不同csv格式非常大​​(如N列的组合爆炸),那么您唯一的选择就是脚本任务。