Estoy usando openrowset para importar un archivo csv a SQL Server. Una de las columnas en el archivo csv contiene números en notación científica (1.08E + 05) y la columna en la tabla que se está insertandoConvertir notación científica para flotar cuando se usa OpenRowSet para importar un archivo .CSV
Por defecto está importando el valor como 1 e ignorando el .08E + 05.
He intentado usar cast() y convert() para convertir el valor directamente cuando se ejecuta la consulta, así como configurar el tipo de datos en la tabla como una cadena de caracteres e importarla como tal. Todos estos métodos tienen el mismo comportamiento cuando se ignora el .08E + 05.
¿Hay alguna manera de tener el valor importado como 108000 en lugar de 1 sin el .08E + 05 sin tener que cambiar el archivo csv en sí?
Configuración del tipo de datos como un varchar y la lectura en el archivo csv parece tener el mismo efecto con el siguiente código:
CREATE TABLE #dataTemp (StartDate datetime, Value varchar(12))
SET @insertDataQuery = 'SELECT Date, CSVValue from OpenRowset(''MSDASQL'', ''Driver={Microsoft Text Driver (*.txt; *.csv)}; DefaultDir='
SET @insertDataQuery = @insertDataQuery + 'C:\Data\;'',''SELECT * FROM '+ '11091800.csv' + ''')'
INSERT INTO #dataTemp EXEC(@insertDataQuery)
SELECT * FROM #dataTemp
No todos los valores en el archivo CSV ver la notación científica y la valor sin él, por ejemplo 81000 se encuentran sin problema.
En realidad, en su caso, ahora que estoy re-leer la pregunta probablemente puede utilizar SELECT CONVERT (INT , CONVERTIR (FLOTAR, '1.08E + 05 ')); '- la última vez que trabajé en notación científica estaba tratando con contadores de rendimiento de LogMan, y definitivamente necesitaba los lugares decimales ... –
Cualquiera de las soluciones anteriores funciona si proporciono el valor explícitamente. En el archivo CSV tengo un nombre de columna para el valor y si lo uso, por ejemplo, CONVERT (INT, CONVERT (FLOAT, COLUMN_NAME_IN_CSV)) sigo teniendo el comportamiento en el que solo lee el primer dígito. ¿Pensamientos? – amarcy
Mis pensamientos todavía están en insertarlos a granel en una tabla de varchar primero. Puede haber algo más cuando su inserción ... seleccione desde la consulta openrowset está tratando de hacer coincidir los tipos de tabla con los metadatos de la consulta. Si está insertando en varchar primero, no va a importar ... –