【问题标题】:Importing Excel into SQL with mixed columns - Large Numbers Contain E+使用混合列将 Excel 导入 SQL - 包含 E+ 的大数
【发布时间】:2021-05-07 00:48:30
【问题描述】:

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

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

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

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

有什么方法可以完全按照它们在 Excel 中的显示方式导入这些值?

【问题讨论】:

  • 您使用的是什么关系型数据库?最后,您可能会发现从 excel 输出到 csv,然后导入 csv 会更容易。您将对导出到 csv 有更多控制权,并对导入到数据库有更多控制权(无论它是什么数据库......)
  • 我正在使用 Microsoft SQL Server。我考虑过使用 CSV,但如果可能,我想使用 Excel。

标签: sql excel tsql


【解决方案1】:

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

;Extended Properties="IMEX=1"

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

【讨论】:

    【解决方案2】:

    有一个选项可以编辑列映射到您选择的数据类型。它处于向导的最后阶段之一。注意不要因为数据转换而丢失电话号码开头的 0,这有时会令人头疼

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2012-03-07
          • 1970-01-01
          • 1970-01-01
          • 2014-12-17
          • 2017-12-02
          • 1970-01-01
          • 2019-09-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多