在我的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]。