代码之家  ›  专栏  ›  技术社区  ›  Pரதீப்

如何避免在Openrowset中将十进制值读取为Float

  •  2
  • Pரதீப்  · 技术社区  · 7 年前

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

    检查后,我在 #温度 float ,这是由于其近似数据类型而导致此问题的。

    有没有办法避免把它放在浮子里?

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

    1 回复  |  直到 7 年前
        1
  •  -1
  •   Radu Matei Birle    7 年前

    试试这个方法:

    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]。