我有SSIS数据流任务,需要将数据从一个sql数据库传输到另一个sql数据库。我的SQL中的源数据库列数据类型是float,在ssis中是double-precision float [DT_R8]。目标列数据类型为Varchar(50)。当我执行数据流时,传送到目标表的数据与源数据不同,例如:
+------------+---------------------------------+
| SourceValue| DestinationValue After execution|
+------------+---------------------------------+
| 0.579 | 0.578999999999999965 |
| 0.637 | 0.63700000000000001 |
| 0.503 | 0.503 |
+------------+---------------------------------+因此,对于一些价值观,它是相同的,但对另一些不同。我尝试过三种方法来解决这个问题:-
cast(col as varchar)cast(col as float)double-precision float [DT_R8]。虽然我收到警告说,数据类型需要在执行时更改。但上述任何一步都解决不了我的问题。
发布于 2015-08-20 17:40:48
我找到了解决方案,在源流中,我将数据类型从double-precision float [DT_R8]更改为DT_DECIMAL。它现在工作正常,值按原样传输到目标表。
例:
+------------+---------------------------------+
| SourceValue| DestinationValue After execution|
+------------+---------------------------------+
| 0.579 | 0.579 |
| 0.637 | 0.637 |
| 0.503 | 0.503 |
+------------+---------------------------------+发布于 2015-08-19 12:39:46
这就是浮子的工作方式。我假设您正在使用一些工具来查看源值:大多数工具都会修剪浮点值(将其四舍五入以供显示),所以我打赌0.579实际上是0.5789999等等。如果您还不知道,浮点数无论如何都不精确。看看维基百科文章,特别是第7部分:准确性问题。
https://stackoverflow.com/questions/32094209
复制相似问题