我正在进行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 |
+------------+---------------------------------+
因此,对于某些值,其他值相同但不同。 我尝试了3种方法来解决这个问题: -
cast(col as varchar)
cast(col as float)
double-precision float [DT_R8]
。虽然我收到警告,数据类型需要在执行时更改。但上述步骤都没有解决我的问题。
答案 0 :(得分:4)
我找到了解决方案,在源流程中我已将数据类型从double-precision float [DT_R8]
更改为DT_DECIMAL
。它的工作正常,值将按原样传输到目标表。
例如:
+------------+---------------------------------+
| SourceValue| DestinationValue After execution|
+------------+---------------------------------+
| 0.579 | 0.579 |
| 0.637 | 0.637 |
| 0.503 | 0.503 |
+------------+---------------------------------+
答案 1 :(得分:0)
这是float的工作方式。我假设您正在使用一些工具来查看源值:大多数工具将修剪浮动值(围绕它们显示),所以我敢打赌0.579实际上是0.5789999等等。如果您还不知道,浮点值无论如何都不准确。看一下Wikipedia article,特别是第7节:准确性问题。