我有一个完整的CSV文件,例如有6列:
Rec ID | Charge Category | Charge Type Category | Product Name | Account No | Cost
我一直在运行SSIS没有问题。
但是,我们发现其中一个CSV文件使用的列少于我们的列:
Rec ID | Charge Type Category | Product Name |Cost
我们如何使用“平面文件连接管理器”类型的连接无法处理此原因?!?!
我们需要探索的其他方法吗?
由于
答案 0 :(得分:0)
如果您只有这两种情况,则可以创建三个文件连接。使用第一行读取整行并仅处理标题。计算其中的列数并创建两个并行流 - 一个用于“短”格式,一个用于“长”,其中每个使用不同的连接定义。
更复杂的选择是在数据流的脚本转换中完成所有这些操作。让您的CSV文件逐行读取文件并将其传递给脚本,该脚本解析该行并将现有列值分配给定义的所有可能输出的子集。应以这样的方式定义输出:配置所有可能的列(类似于:SSIS split string)
解决方案的主要部分是:
平面文件连接,逐行读取文件(将字段分隔符设置为不存在的组合,例如#$#)和
转换模式下的Scipt任务具有单个输入(FullLine)并定义了所有可能的输出:
在脚本中,您可以使用此处精美描述的概念:http://dwbi1.wordpress.com/2011/02/27/ssis-importing-files-read-the-first-n-rows/
写完这些之后,我刚刚意识到脚本任务源可能是最简单的方法,并将所有可能的列定义为输出。