SSIS相当新,并且在我的第一个重大项目中遇到了障碍。 我试图将多个excel工作簿中的数据加载到数据库的单个表中,每个工作簿都有多个工作表。
每张工作表都有一个"父数据"在工作表的顶部,适用于该工作表中的每一行基础数据。我想将这些数据添加到数据库的每一行,但我无法弄清楚如何为每一行添加一个设置单元格。
请记住,每张纸张在摄取数据时也会有不同的父母数据"。
非常感谢任何帮助或指示
答案 0 :(得分:2)
SSIS数据流中没有允许您根据前一行数据检查/修改当前行的本机转换。
在您的情况下,您希望将信息从第1行传送到第2行到第N行。
正如@ Nick.McDermaid指出的,你有大约3个选项。
第一种方法是将它们全部加载到一个表格中,并按照#34;然后在后加载步骤中修改数据(很可能是执行SQL任务)
第二步是双读文件/工作表。第一次读取将拉出标题数据并将其分配给SSIS变量(脚本任务最简单,RecordSet目标+ Foreach枚举器将是无代码的方式)然后您可以使用派生列转换来注入变量作为列。 对于未来的读者,如果父块保持不变,这种方法仅才能工作。如果你正在解析复杂的记录类型(大型机,混合标题/详细记录,EDI,EMR等),这可能是你错误的工具
第三步是深入研究您选择的.NET语言,并编写一个过于复杂的脚本组件源来根据需要汇总数据。我在SSIS Excel Source via Script的这篇文章中略论了一点。 ExcelReader类中的一般概念是使用JET / ACE oledb提供程序将Excel工作表读入DataTable
将内容放入数据表后,就可以编写解析逻辑(ExcelParser)。从前N行中提取所需的任何数据,然后对数据表中的每一行,添加输出缓冲区并复制现有行并使用标题数据进行扩充。
漂亮,它不是,但当数据不是正确的表格时,它是解决问题的唯一方法。