La causa del problema es el proveedor Oledb
Al importar un archivo csv o archivos de Excel con una columna de tipos de datos mixtos, reemplazará los tipos no dominantes por null
. (Usando Oledb o Ace.Oledb )
Soluciones alternativas
Puede solucionarlo agregando una primera fila que contenga valores de cadena y luego eliminándola después de que finalice la importación
ID,A,B,C
0,a,a,a
1,12,hh,i
2,ab12,tt,b
3,2,aa,o
4,bc12,ee,l
Y solucionará el problema si usa IMEX=1
Esto leerá las columnas como cadena y la columna de ID como número. (se usa 0)
O agregue HDR=NO
propiedad a la cadena de conexión, por lo que el encabezado es la primera línea importada (todos sus valores son cadenas)
Lea más sobre tipos de datos mixtos en este artículo
Otros métodos
O intente lograr esto sin el proveedor aceoledb, simplemente importe el archivo csv de otra manera como la siguiente:
Uso del controlador de texto de Microsoft
SELECT * FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=C:\;',
'SELECT * FROM abc.csv')
Usando BULK INSERT
CREATE TABLE dbo.MyTable
(ID INTEGER,
A VARCHAR(50),
B VARCHAR(50),
C VARCHAR(50)
)
BULK INSERT dbo.MyTable
FROM 'C:\abc.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
Otros detalles en estos artículos:
- ¿Cómo importar un archivo csv con OPENROWSET?
- T-SQL – Lee archivos CSV usando OpenRowSet (Un tutorial detallado)