如何避免在Openrowset中将Decimal值读取为Float



在我的excel中,有些值如下

11.17
3.35
2.28
1.4

以CCD_ 1类型存储。

将excel导入数据库后,一些值的小数点位置将完全更改。

示例

SELECT * into #temp 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',    
'Excel 12.0;IMEX=1;Database=D:testtestfile.xlsx',
[Data$])  

来自CCD_ 2的数据将被插入到数据类型为CCD_。

11.17 is changed to 11.17000000000000000000
3.35 is changed to 3.35000000000000010000
2.28 is changed to 2.27999999999999980000--wrong
1.4 is changed to 1.39999999999999990000--wrong

经过检查,我发现#temp中列的数据类型是float,这是导致此问题的近似数据类型。

有没有办法避免将其存储在浮子中?

我知道我们可以在fmt文件中使用BULK选项,但excel中的列数不是静态的,所以我不能使用该选项。

这样试试:

SELECT * as [Decimal] into #temp 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',    
'Excel 12.0;IMEX=1;Database=D:testtestfile.xlsx',
[Data$])  

它可能会把*当作[十进制]来大惊小怪。您应该选择[ColumnName]作为[Decimal]。

最新更新