sql - SSIS数据转换十进制问题
问题描述
我有一个 dtsx 包在我们的 SQL 服务器(2016 SP2 CU6)上的 SSIS 中运行,它是一项轻量级任务,将 Excel(xlsx)工作表按原样导入 SQL 表中,现阶段不需要转换,有一个代理围绕它做更多工作的工作,但我可以看到故障仅发生在本节中。
我看到的问题是 Excel ( 0.0153
) 中的一个数字出现在 SQL 中,好像转换错误 ( 1.5299999999999999E-2
)。
确认 Excel 中的数字是0.0153
不是更长或格式如下所示。
导入后,这就是我所拥有的:-
我觉得这很奇怪: -
- 他们都处于非常相似的情况,但结果不同
- 它们在 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.0
OLD DB Connection 到达表。
它是一个简单的包,但为什么这个值会如此疯狂地跳跃。它不是一次性的,输入有大约 1700 行,我们在许多行上看到了这一点。
解决方案
在企业环境中,我们不能总是选择源数据和目标数据,有时我们只需要“让它工作”。Excel 尤其是 SSIS 中的噩梦,只需对输入文件进行一次错误更改,您的工作就会失败,因为元数据不再匹配。
是的,理想情况下这是数字数据,应该存储在数字数据字段(而不是字符串/字符字段)中。
这就是我过去完成此场景的方式,希望它适用于您的情况,但实际上取决于生成的数据将用于什么。
- 在数据流任务中添加数据转换步骤,将双精度浮点值转换为小数(我使用了 scale=10)
2. 添加第二个数据转换步骤,将十进制值转换回 Unicode 字符串
3. 更改您的 OLE DB 目标映射以使用来自第二个数据转换任务的新输出列。
结果:
推荐阅读
- python - 使用张量流时出现错误 TypeError
- apache-spark - 如何使用 Apache Spark 读取/写入协议缓冲区消息?
- jquery - 错误:使用 JQuery 从列表中选择单选按钮
- html - 更改布尔玛中的选择箭头颜色
- mongodb - 通过整个未知文档中的键和值在 mongo 中搜索
- ios - 我正面临这个错误“exc_bad_instruction (code=exc_i386_invop subcode=0x0)”
- angular - 如何从中获取 FormControl 的值并将其作为参数传递给函数?
- android - 如何使用 volley 发送 JSON 原始数据
- java - springboot 2.0.3.RELEASE 版本中的分页不起作用
- c++ - 如何在容器中指定模板化别名的泛型类型