4

团队,

我的目标是使用 SSIS 将数据从 Excel 加载到 Sql 表。然而,excel 是非常动态的,即它们的列数可能会发生变化,或者现有列的顺序可能会发生变化。但目标表将是相同的......

所以我正在考虑几个选项,例如:
1)在“Excel源”中使用SQL命令-但不幸的是我必须将“第一行作为标题”设置为false(为了解决Excel Connection Mngr将数据类型感知为基于数字的问题在最初的几条记录中)。所以基于标题的查询在这里不起作用。

2)我脑海中的另一个选项是脚本任务,并根据我知道的列编写 C# 代码来读取 excel。所以在这种情况下,新列的顺序和插入/删除无关紧要。

建议我脚本任务是否是我唯一可用的选项?在SSIS中实现同样的任何其他简单方法?另外,如果可能的话,建议我提供相同的参考。

谢谢,贾斯汀塞缪尔。

4

2 回答 2

2

如果您需要自动化该过程,那么我肯定会使用脚本组件/OleDbDataAdapter 组合(您不能使用流式阅读器,因为 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

于 2012-12-03T14:35:12.503 回答
1

这可以使用 SQL Server 提供的“导入和导出数据”工具轻松完成。

第 1 步:将 Excel 指定为源,将 SQL Server DB 指定为目标。

第 2 步:提供必要的映射。

步骤: 3在最后一个屏幕中,您可以指定“另存为 SSIS 包”和文件系统。将为您创建一个相关的 dtsx SSIS 包。

在 SQL Server 导入和导出向导创建包并复制数据后,您可以使用 SSIS 设计器通过添加任务、转换和事件驱动逻辑来打开和更改保存的包。

(因为它基于 Header 工作,所以顺序应该无关紧要。如果缺少特定列,它应该自动取 NULL)

参考:http: //msdn.microsoft.com/en-us/library/ms140052.aspx

于 2012-12-03T12:37:01.717 回答