SSIS - 除了脚本任务外,还有其他解决方案吗?

4

团队,

我的目标是使用SSIS从Excel中将数据加载到Sql表中。但是Excel文件非常动态,即其列计数可能会变化或现有列的顺序可能会更改。但目标表将保持不变...

因此,我正在考虑一些选项,例如:
1)在“ Excel源”中使用SQL命令-但不幸的是,我必须将“第一行作为标题”设置为false(以解决Excel连接管理器基于前几条记录感知数据类型为数字的问题)。因此,在标题上查询是不起作用的。

2)我心中的另一个选择是Script Task,并编写C#代码来基于我所知道的列读取Excel。因此,在这种情况下,新列的顺序、插入/删除将没有影响。

建议我Script Task是否是唯一可用的选项?还有其他简单的方法可以在SSIS中实现相同的功能吗?如果可能,请为我提供参考。

谢谢, Justin Samuel。


根据您在此处的描述,源和目标都将具有不同的结构。如果没有脚本来完成这个任务,那听起来会很麻烦...关于感应数据类型,请阅读此答案以获取更详细的信息:https://dev59.com/I3RB5IYBdhLWcg3wtZMV#542573 - cairnz
嘿,刚刚编辑了一下 - 目的地还是一样的。也就是说,SQL表结构不会改变。 - Justin Samuel
答案中的链接似乎也失效了... - Justin Samuel
嘿,你提到列数可能会变化。假设 SQL 表中有 X 列 - 你的 Excel 文件只包含 <=X 列应该移动到 SQL 中,还是也包含其他无用的列?如果源(Excel)中缺少一列,你是否愿意在目标中保留 NULL 值? - tempidope
@JKarthik - 大多数情况下会有>X列。但是如果<X,那么在目标列中插入NULL值也可以。 - Justin Samuel
2个回答

2
如果您需要自动化这个过程,那么我肯定会选择脚本组件/OleDbDataAdapter组合(因为Excel是一种专有格式,所以无法使用StreamReader)。如果不需要自动化,则可以使用导入向导。
如果尝试使用基于连接管理器的解决方案,则在文件布局更改时会失败。通过使用脚本组件/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


在 SSIS 中记录程序包执行时出现的异常/错误的最佳方法是什么?是否使用 try/catch 是解决这个问题的方式?有任何建议吗? - Justin Samuel
是的,您可以在程序包执行期间记录消息。请参考此处http://msdn.microsoft.com/en-us/library/ms140246.aspx。 - tempidope

1

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

步骤 1:将 Excel 指定为源,将 SQL Server 数据库指定为目标。

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

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

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

(由于它基于标题工作,因此顺序不重要。如果某个特定列丢失,则应自动将 NULL 用于该列)

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


好建议JKarthik,决定采用另一种解决方案,因为它最符合要求。谢谢! :) - Justin Samuel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接