十进制的SSIS数据转换问题

Gar*_*ans 2 sql sql-server ssis

我有一个 dtsx 包在我们的 SQL 服务器(2016 SP2 CU6)上的 SSIS 中运行,它是将 Excel (xlsx) 工作表按原样导入到 SQL 表中的轻量级任务,现阶段不需要转换,有一个代理围绕它做了更多的工作,但我可以看到错误发生在这一部分。

我看到的问题是 Excel ( 0.0153)中的一个数字在 SQL 中出现,好像转换得很糟糕 ( 1.5299999999999999E-2)。

确认 Excel 中的数字0.0153不是更长的或格式设置为这样的。

两个值都只有 6 个字符的长度,公式栏显示实际值

导入后,这就是我所拥有的:-

两个值都显示在 SQL 中

我觉得这很奇怪:-

  • 他们都处于非常相似的情况,但结果却不同
  • 它们在 Excel 工作表中一个接一个
  • 它们靠近工作表的顶部(第 10 行和第 11 行),因此如果发生类似情况,采样应该使用它们来了解数据类型(第 1 行0.193841也是类似的,总体范围是 -29 到 200保留 7 位小数)
  • 它们之间只有 0.0021 的差异

Excel 中的数字格式是General,SQL 中的列是NVARCHAR(255)

在 SSIS 包中,外部列的 Excel 源数据类型被归类为double-precision float [DT-R8](不确定它来自哪里,但我无法更改它)并且输出列Unicode string [DT-WSTR]

然后我使用Native OLE DB\SQL Server Native Client 11.0OLD DB Connection 来访问表。

它是一个简单的包,但为什么这个值会如此疯狂地跳跃。它不是一次性的,输入有大约 1700 行,我们在许多行上看到了这一点。

包装布局

4e *_* 6b 6

在企业环境中,我们不能总是选择源数据和目标数据,有时我们只需要“让它发挥作用”。Excel 是 SSIS 中的噩梦,尤其是,它所需要的只是对输入文件的一个错误更改,并且您的工作由于元数据不再匹配而失败。

是的,理想情况下这是数字数据,应该存储在数字数据字段(而不是字符串/字符字段)中。

这就是我过去完成此场景的方式,希望它适用于您的情况,但实际上取决于结果数据的用途。

  1. 在数据流任务中添加数据转换步骤,将双精度浮点值转换为小数(我使用了 scale=10)

数据流任务 数据转换 - 到十进制 2. 添加第二个数据转换步骤,将十进制值转换回 Unicode 字符串

数据转换 - 到字符串 3. 更改 OLE DB 目标映射以使用来自第二个数据转换任务的新输出列。

列映射

结果:

数据库结果