sql >> Base de Datos >  >> RDS >> Sqlserver

Error de importación usando Openrowset

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: