2013-04-09 87 views
0

我正在使用具有175个不同Excel模板的客户端来创建我需要导入到SQL 2008 R2中的工作表。有一个节约的宽限期,模板中有10列是所有175共有的列,他们也是我需要导入到SQL表中的列。这里是我的问题:如果我只将所有工作表通用的列映射到数据库表,SSIS是否会忽略其他列,或者我需要以某种方式对这些额外列做些什么?从Excel导入SSIS选择性列

我开发了一个供用户使用的模板,但显然他们需要这些其他列以供除了我正在执行的导入之外的其他应用程序使用。

我目前的SSIS过程有一个准备SQL任务来创建SQL表,然后是一个数据流任务,它映射Excel工作表列和一个导入任务,该导入任务采用映射列并更新表。

我的猜测是,如果我只用我需要的列创建表格,将Excel映射调整为只选择表格中的可用列,导入将只移动这些列,因此,我会无论使用哪个模板,都有我需要的东西。

有没有人做过这样的事情?这个过程大约需要6个月,直到新系统可用,这将在两个系统之间共享这些数据。

提前感谢任何输入。

回答

1

如果您可以使用SQL语句从Excel表格/范围/表格中进行选择,那么只需选择所需的列,就可以使表格与SSIS显示一致。

但是,这个select语句将需要知道范围或表的名称,所以这需要一致。

如果这是不可能的,我建议你创建一个脚本来打开Excel文件并删除所有不需要的列..如果一切都不正确或者如果它不是防御性的,这个过程很容易崩溃。

+0

谢谢。昨晚我输入了175张纸张中的4张。它们与关键列上的命名非常一致,所以我只能映射我需要的列。我今天继续测试,但这似乎工作。我很好奇你的意思是通过防守来写作。 – 2013-04-10 13:43:45

+0

维基百科有一个很好的解释:) http://en.wikipedia.org/wiki/Defensive_programming 你的代码试图预测你可以想到的每一个可能的失败。所以你最终得到80%的代码作为错误处理。我只是提到它,因为在之前关于触发器的问题中,一张海报表示只有1行会插入到他的表格中,所以他不需要满足多行...并且我说这不是很好防御性编程。说实话,它甚至不应该有一个特殊的名字,所有的代码应该这样写! – 2013-04-10 23:11:39

+0

因为数据质量不好,导入Excel时必须特别防守,人们创建宏和公式,跳过行,以及代码中允许的所有类型的东西。 – 2013-04-10 23:12:57