Как избежать чтения десятичного значения как Float в Openrowset - PullRequest
0 голосов
/ 03 декабря 2018

В моем 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 не является статическим, поэтому я не могу использовать эту опцию.

1 Ответ

0 голосов
/ 03 декабря 2018

Попробуйте следующим образом:

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

Может показаться, что * как [десятичное число].Вы должны выбрать [ColumnName] как [Десятичное число].

...