队
我的目标是使用SSIS将数据从Excel加载到Sql表。然而,excels非常动态,即它们的列数可能会有所不同,或者现有列的顺序可能会发生变化。但目的地表将是相同的......
所以我正在考虑几个选项,如:
1)在“Excel源代码”中使用SQL命令 - 但遗憾的是我必须将“第一行作为标题”设置为false(要解决Excel Connection Mngr的问题,根据前几条记录将数据类型检测为数字)。所以基于标题的查询在这里不起作用。
2)我脑海中的另一个观点是Script Task,并根据我所知的列编写C#代码来读取excel。因此,在这种情况下,新列的顺序和插入/删除都无关紧要。
建议我脚本任务是否是我唯一可用的选项?在SSIS中实现相同的任何其他简单方法?如果可能的话,也建议我参考相同的内容。
谢谢, 贾斯汀塞缪尔。
答案 0 :(得分:2)
如果您需要自动化该过程,那么我肯定会使用脚本组件/ OleDbDataAdapter组合(您不能使用streamreader,因为Excel是专有格式)。如果没有,请使用导入向导。
如果您尝试使用基于连接管理器的解决方案,则在文件布局更改时它将失败。使用脚本组件/ OleDbDataAdapter组合,您可以添加逻辑来解释字段并在加载前标准化记录布局。您还可以使用Try / Catch创建错误缓冲区并正确地将错误值推送到它。
以下是有关如何在数据流任务中将脚本组件用作源的一些链接:
http://microsoft-ssis.blogspot.com/2011/02/script-component-as-source-2.html http://beyondrelational.com/modules/2/blogs/106/posts/11126/ssis-script-component-split-single-row-to-multiple-rows.aspx
答案 1 :(得分:1)
使用SQL Server提供的“导入和导出数据”工具可以轻松完成此操作。
步骤1:将Excel指定为源,将SQL Server数据库指定为目标。
第2步:提供必要的映射。
步骤:3 在最终屏幕中,您可以指定“另存为SSIS包”和文件系统。将为您创建相关的dtsx SSIS包。
在SQL Server导入和导出向导创建包并复制数据后,您可以使用SSIS设计器通过添加任务,转换和事件驱动逻辑来打开和更改已保存的包。
(因为它基于Header工作,顺序无关紧要。如果缺少某个特定的列,它应该自动为NULL)