使用混合列将Excel导入SQL - 大数字包含E +

时间:2016-02-17 21:34:56

标签: sql excel tsql

我通过导入向导将Excel文档导入SQL表。我的表包含许多列,其中一些包含电话号码,以及相当长(10+个数字)的数字/字母标识符。

导入Excel文档后,会修改这些数字。示例:22222222222222200000在SQL数据库中存储为2.22222E + 19。

我已尝试将Excel中的列格式化为字符串,常规,整数等,但它似乎并不重要。当列设置为整数时,它们会在Excel中准确显示数字,但在导入时,它们将被修改为包含E +。

在上传时,导入向导会自动假设这些列为" Float,"我也尝试将它们改为nvarchar。导入仍然会修改大数字。

有没有办法像Excel中显示的那样导入这些值?

4 个答案:

答案 0 :(得分:1)

我以前见过这个问题,这是Excel的问题而不是SSIS。 Excel会对前几行进行采样,然后即使您明确将其设置为文本也会推断出数据类型。您需要做的是将其放入SSIS包中的Excel文件连接字符串中。该指令告诉Excel列中包含混合数据类型,并提示它在确定列是数字类型之前进行额外检查,而实际上并非如此。

;Extended Properties="IMEX=1"

它应该适用于此(在大多数情况下)。更安全的做法是将Excel数据导出到制表符分隔文本,并使用SSIS导入该文本。

答案 1 :(得分:0)

可以选择将列的映射编辑为您选择的数据类型。它处于向导的最后阶段之一。小心不要因为数据转换而丢失电话号码开头的0,当你错过它时,这有时会非常令人头痛

答案 2 :(得分:0)

如果您仍然遇到问题,请在Excel中输入信息时将撇号放在文本前面(或以编程方式添加)。 Excel将始终将值标识为字符串值。

答案 3 :(得分:0)

这个问题的一个解决方法是在 excel 中创建一个新列并输入公式 =""&CellAddressHavingEPlusValue&"",这将从数据中删除 E+。现在您可以导入 excel 并且从这个新列加载的值将正确无 E+,现在可以从表中删除具有 E+ 值的值。