Для BULK INSERT
методологий я часто находил, что проще сначала переместить данные в таблицу всех вариантов, затем избавиться от посторонних вещей, таких как заключенные в кавычки, и исправить форматирование.Я помню, как у меня было немало времени, чтобы избавиться от научной нотации, вы можете просто играть с таблицей varchar до тех пор, пока не сделаете все правильно.Я помню, как пробовал все виды комбинаций точности / масштаба, пока, наконец, не нашел подходящую комбинацию.Я думаю, что для меня это было FLOAT
тогда DECIMAL(24,12)
...
SELECT CONVERT(DECIMAL(24, 12), CONVERT(FLOAT, '1.08E+05'));
РЕДАКТИРОВАТЬ добавление того, что я сделал, чтобы попытаться воспроизвести и / или продемонстрироватьменее запутанный способ.
Я создал очень простой файл CSV:
StartDate,Value
20110808,81000
20110808,1.08E+05
Затем я запустил следующий код (по какой-то причине я не могу запустить MSDASQL на своей машине, чтобыспаси мою жизнь):
CREATE TABLE #dataTemp(StartDate DATETIME, Value VARCHAR(32));
BULK INSERT #dataTemp FROM 'C:\data\whatever.csv'
WITH (ROWTERMINATOR='\n', FIELDTERMINATOR=',', FIRSTROW = 2);
SELECT * FROM #dataTemp
GO
SELECT StartDate, CONVERT(INT, CONVERT(FLOAT, Value)) FROM #dataTemp;
GO
DROP TABLE #dataTemp;
Результаты:
StartDate Value
----------------------- --------
2011-08-08 00:00:00.000 81000
2011-08-08 00:00:00.000 1.08E+05
StartDate (No column name)
----------------------- ----------------
2011-08-08 00:00:00.000 81000
2011-08-08 00:00:00.000 108000