如何处理在SSIS中更改了多列的CSV文件?

时间:2012-10-25 01:16:53

标签: sql-server-2005 ssis

我有一个完整的CSV文件,例如有6列:

Rec ID | Charge Category | Charge Type Category | Product Name | Account No | Cost 

我一直在运行SSIS没有问题。

但是,我们发现其中一个CSV文件使用的列少于我们的列:

Rec ID | Charge Type Category | Product Name |Cost

我们如何使用“平面文件连接管理器”类型的连接无法处理此原因?!?!

我们需要探索的其他方法吗?

由于

1 个答案:

答案 0 :(得分:0)

如果您只有这两种情况,则可以创建三个文件连接。使用第一行读取整行并仅处理标题。计算其中的列数并创建两个并行流 - 一个用于“短”格式,一个用于“长”,其中每个使用不同的连接定义。

更复杂的选择是在数据流的脚本转换中完成所有这些操作。让您的CSV文件逐行读取文件并将其传递给脚本,该脚本解析该行并将现有列值分配给定义的所有可能输出的子集。应以这样的方式定义输出:配置所有可能的列(类似于:SSIS split string

解决方案的主要部分是:

  1. 平面文件连接,逐行读取文件(将字段分隔符设置为不存在的组合,例如#$#)和

  2. 转换模式下的Scipt任务具有单个输入(FullLine)并定义了所有可能的输出:

    enter image description here

  3. 在脚本中,您可以使用此处精美描述的概念:http://dwbi1.wordpress.com/2011/02/27/ssis-importing-files-read-the-first-n-rows/

    写完这些之后,我刚刚意识到脚本任务源可能是最简单的方法,并将所有可能的列定义为输出。