在我的Excel中,一些值是这样的
11.17
3.35
2.28
1.4
以General
类型存储。
将excel导入数据库后,某些值的小数位将完全更改。
示例
SELECT * into #temp
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;IMEX=1;Database=D:\test\testfile.xlsx',
[Data$])
来自#temp
的数据将被插入到数据类型为decimal(38,20)
的目标表中。
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
,这导致此问题是其近似数据类型。
有没有办法避免将其存储在float中?
我知道我们可以使用BULK
文件的fmt
选项,但是excel中的列数不是静态的,因此我不能使用该选项。
答案 0 :(得分:0)
尝试一下:
SELECT * as [Decimal] into #temp
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;IMEX=1;Database=D:\test\testfile.xlsx',
[Data$])
可能会在*上大惊小怪。您应该选择[ColumnName]作为[Decimal]。