【问题标题】:Scientific Notation Issue while loading data from Excel (xlsx) file to SQL Tables via SSIS通过 SSIS 将数据从 Excel (xlsx) 文件加载到 SQL 表时出现科学记数法问题
【发布时间】:2021-05-21 14:37:30
【问题描述】:

我正在使用 SSIS 包将数据从 excel 文件 (.xlsx) 加载到 SQL 表。对于一列,它在数据中添加科学记数法,它已经存在于 excel 文件中。但它的实际值并未加载到 SQL 表中。我尝试了派生列、表达式等的多个选项。但我无法获得正确的值。

此列包含数字和 nvarchar 值的数据。下面是该列的示例。

ApplicationNumber  
1.43E+15  
923576663  
25388447  
TXY020732087  
18794588  
TXAP0000140343  

**Actual Values -**  
ApplicationNumber  
1425600000000000  
923576663  
25388447  
TXY020732087  
18794588  
TXAP0000140343 

从 Business 到 Excel 的数据没有问题。但是我们如何在 SSIS 中处理这种情况呢? 我也试过 (DT_I8)ApplicationNumber==(DT_I8)ApplicationNumber, 但它给出了上面的值 1.43E+15 -> 1.430000000000000 而不是 1425600000000000

【问题讨论】:

  • Excel 有各种各样的问题作为来源。如果将文件保存为 CSV 会发生什么?如果这样可行,那么我建议改为导入它。
  • 我试过了,但在 CSV 中它也添加了科学记数法。但我们必须在这里应用通用解决方案。
  • By 但它的实际值没有加载到 SQL 表中你的意思是行加载但列是 NULL? excel 作为一种数据交换格式,你真的会遇到无穷无尽的问题。首先要做的是尝试IMEX技巧stackoverflow.com/questions/3595131/…social.msdn.microsoft.com/Forums/sqlserver/en-US/…
  • 您可以在导入文件之前进行此操作吗? superuser.com/a/1301584
  • @Nicolaesse :不,这个文件来自商业用户,所以我们不能手动更新/修改它。即使是设置更改。

标签: sql-server excel ssis business-intelligence


【解决方案1】:

您可以做的一件事是在 excel 源的高级编辑器中将输出设置为具有大比例的十进制,例如 20 位:

更新

要考虑同一列中的字符串,您可能需要重定向错误输出,因为这些会引发转换错误:

在高级编辑器中:

默认输出:

错误输出:

然后您可以从默认输出和错误输出更新您的数据库。

【讨论】:

  • 在您的场景中,它将如何处理该列的 nvarchar 值。它会抛出一个错误。正如我所提到的,以下是值,我们必须应用通用解决方案。申请号 1425600000000000 923576663 25388447 TXY020732087 18794588 TXAP0000140343
  • @AjitMedhekar 是的,它们会产生错误,因此您可能需要重定向这些行。我已经用示例更新了答案
  • 这看起来更好的解决方案。但这里唯一的问题是,在我的源 excel 文件中,应用程序编号列的数据类型采用十进制/浮点数,因为文件的前 8 行是十进制类型。我也尝试过 IMEX=1,但由于它是 PROD 服务器,因此我无法更新注册表值。
【解决方案2】:

我最近在使用 SSIS 时也遇到了这个问题。

1- 将 Excel 中的列类型更改为“数字”

2- 删除小数位。

3- 使用 SSIS 上传文件

【讨论】:

  • 不,这是不可能的。正如我的问题中提到的,列中也有 nvarchar 值。而且我们不想手动更新业务用户提供的任何文件列。
  • 我明白了,那么你需要一个额外的步骤:将列中的所有值转换为字符串,然后导入数据库。这里有一个参考链接如何在 Excel 中进行转换。 ablebits.com/office-addins-blog/2014/10/10/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-07
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多