Estoy buscando ayuda para importar un .csv
archivo a SQL Server usando BULK INSERT
y tengo algunas preguntas básicas.
Cuestiones:
Los datos del archivo CSV pueden tener
,
(coma) entre (Ejemplo: descripción), entonces, ¿cómo puedo hacer que la importación maneje estos datos?Si el cliente crea el CSV desde Excel, entonces los datos que tienen una coma están encerrados entre
""
comillas dobles (como en el ejemplo a continuación), entonces, ¿cómo puede manejar esto la importación?¿Cómo rastreamos si algunas filas tienen datos incorrectos, que importan saltos? (importa saltos de filas que no son importables)
Aquí está el CSV de muestra con encabezado:
Name,Class,Subject,ExamDate,Mark,Description
Prabhat,4,Math,2/10/2013,25,Test data for prabhat.
Murari,5,Science,2/11/2013,24,"Test data for his's test, where we can test 2nd ROW, Test."
sanjay,4,Science,,25,Test Only.
Y declaración SQL para importar:
BULK INSERT SchoolsTemp
FROM 'C:\CSVData\Schools.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',', --CSV field delimiter
ROWTERMINATOR = '\n', --Use to shift the control to next row
TABLOCK
)
sql
sql-server
csv
bulkinsert
bulk
Prabhat
fuente
fuente
BULK NSERT
o no tiene permisos para ello).Respuestas:
Importación CSV de SQL Server basada
Solución
Si está utilizando
,
(coma) como delimitador, entonces no hay forma de diferenciar entre una coma como un terminador de campo y una coma en sus datos. Yo usaría un meFIELDTERMINATOR
gusta diferente||
. El código se vería así y esto manejará perfectamente una coma y una barra diagonal.Solución
Si está utilizando la inserción BULK, entonces no hay forma de manejar comillas dobles, los datos se insertarán con comillas dobles en filas. después de insertar los datos en la tabla, puede reemplazar esas comillas dobles con '
'.
Solución
Para manejar filas que no se cargan en la tabla debido a datos o formato no válidos, podría manejarse usando la propiedad ERRORFILE , especifique el nombre del archivo de error, escribirá las filas que tienen un error en el archivo de error. el código debería verse así.
fuente
Primero debe crear una tabla en su base de datos en la que va a importar el archivo CSV. Después de crear la tabla, siga los pasos a continuación.
• Inicie sesión en su base de datos usando SQL Server Management Studio
• Haga clic derecho en su base de datos y seleccione
Tasks -> Import Data...
• Haz clic en el
Next >
botón• Para la Fuente de datos, seleccione
Flat File Source
. Luego use el botón Examinar para seleccionar el archivo CSV. Dedique un tiempo a configurar cómo desea que se importen los datos antes de hacer clic en elNext >
botón.• Para el Destino, seleccione el proveedor de base de datos correcto (por ejemplo, para SQL Server 2012, puede usar SQL Server Native Client 11.0). Ingrese el nombre del servidor. Verifique el
Use SQL Server Authentication
botón de radio. Ingrese el Nombre de usuario, Contraseña y Base de datos antes de hacer clic en elNext >
botón.• En la ventana Seleccionar tablas y vistas de origen, puede editar asignaciones antes de hacer clic en el
Next >
botón.• Marque la
Run immediately
casilla de verificación y haga clic en elNext >
botón.• Haga clic en el
Finish
botón para ejecutar el paquete.Lo anterior se encontró en este sitio web (lo he usado y probado):
fuente
Debe usar las opciones FORMAT = 'CSV', FIELDQUOTE = '"':
fuente
La mejor, la forma más rápida y fácil de resolver el problema de la coma en los datos es usar Excel para guardar un archivo separado por comas después de haber configurado la configuración del separador de listas de Windows en algo distinto de una coma (como una tubería). Esto generará un archivo separado de tubería (o lo que sea) que luego podrá importar. Esto se describe aquí .
fuente
Primero debes importar el archivo CSV a la tabla de datos
Luego puede insertar filas masivas usando SQLBulkCopy
fuente
Así es como lo resolvería:
Simplemente guarde su archivo CSV como una hoja XLS en Excel (al hacerlo, no tendrá que preocuparse por los delimitadores. El formato de hoja de cálculo de Excel se leerá como una tabla y se importará directamente a una tabla SQL)
Importar el archivo usando SSIS
Escriba una secuencia de comandos personalizada en el administrador de importación para omitir / modificar los datos que está buscando (o ejecute una secuencia de comandos maestra para examinar los datos que desea eliminar)
Buena suerte.
fuente
Como no usan el asistente de importación de SQL, los pasos serían los siguientes:
Haga clic derecho en la base de datos en la opción de tareas para importar datos,
Una vez que el asistente está abierto, seleccionamos el tipo de datos a implicar. En este caso sería el
Seleccionamos el archivo CSV, puede configurar el tipo de datos de las tablas en el CSV, pero es mejor traerlo del CSV.
Dependiendo de nuestro tipo de autenticación lo seleccionamos, una vez hecho esto, aparece una opción muy importante.
(generalmente no comienza desde 1), en cambio, si tenemos una columna con la identificación en el CSV, seleccionamos la inserción de identificación de habilitación, el siguiente paso es finalizar el asistente, podemos revisar los cambios aquí.
Por otro lado, en la siguiente ventana pueden aparecer alertas, o advertencias lo ideal es ignorar esto, solo si dejan error es necesario prestar atención.
Este enlace tiene imágenes .
fuente
Importe el archivo en Excel abriendo primero Excel, luego vaya a DATOS, importe desde el archivo TXT, elija la extensión csv que conservará 0 valores prefijados y guarde esa columna como TEXTO porque Excel sobresaldrá el 0 inicial de lo contrario (NO haga doble clic para abrir con Excel si tiene datos numéricos en un campo que comienza con un 0 [cero]). Luego solo guarde como un archivo de texto delimitado por tabulaciones. Cuando está importando a Excel, tiene la opción de guardar como GENERAL, TEXTO, etc. Elija TEXTO para que las comillas en el medio de una cadena en un campo como YourCompany, LLC también se conserven ...
Desearía poder usar la funcionalidad FORMATO y Fieldquote, pero eso no parece ser compatible con mi versión de SSMS
fuente
Sé que hay respuestas aceptadas, pero aun así, quiero compartir mi escenario que tal vez ayude a alguien a resolver su problema. HERRAMIENTAS
ESCENARIO Estaba cargando el conjunto de datos que está en formato CSV que luego se mostraría en la Vista. Traté de usar la carga masiva pero no puedo cargar como
BULK LOAD
estaba usandoy la celda Excel también estaba usando
,
, sin embargo, tampoco pude usarFlat file source
directamente porque estaba usandoCode-First Approach
y haciendo eso solo hizo el modelo en SSMS DB, no en el modelo desde el que tuve que usar las propiedades más tarde.SOLUCIÓN
Add-Migration
en la consola del paquete NuGetfuente
Sé que esta no es la solución exacta a la pregunta anterior, pero para mí, fue una pesadilla cuando intentaba copiar datos de una base de datos ubicada en un servidor separado a mi local.
Intenté hacerlo exportando primero los datos del servidor
CSV/txt
y luego importándolos a mi tabla local.Ambas soluciones: al escribir la consulta para importar
CSV
o usar el asistente de importación de datos SSMS siempre se producían errores (los errores eran muy generales, indicando que hay un problema de análisis). Y a pesar de que no estaba haciendo especial nada, sólo exportar aCSV
y luego tratar de importaciónCSV
a nivel localDB
, los errores siempre estaban allí.Estaba tratando de mirar la sección de mapeo y la vista previa de datos, pero siempre había un gran lío. Y sé que el problema principal provenía de una de las
table
columnas, que conteníaJSON
y elSQL
analizador lo estaba tratando mal.Finalmente, se me ocurrió una solución diferente y quiero compartirla en caso de que alguien más tenga un problema similar.
Lo que hice fue usar el Asistente de exportación en el servidor externo.
Estos son los pasos para repetir el mismo proceso:
1) Haga clic derecho en la base de datos y seleccione
Tasks -> Export Data...
2) Cuando se abra el Asistente, elija Siguiente y en lugar de "Fuente de datos:" elija "SQL Server Native Client".
3) Después de presionar Siguiente , debe seleccionar la Descripción .
Para eso, seleccione nuevamente "SQL Server Native Client".
Esta vez puede proporcionar su local (o algún otro externo
DB
)DB
.4) Después de presionar el botón Siguiente, tiene dos opciones: copiar toda la tabla de una
DB
a otra o escribir la consulta para especificar los datos exactos que se copiarán. En mi caso, no necesitaba toda la tabla (era demasiado grande), sino solo una parte, así que elegí "Escribir una consulta para especificar los datos a transferir".5) Y, por último, debe especificar la tabla de destino donde se seleccionarán los datos.
Y ahora ve directamente al final del Asistente presionando los botones Siguiente / Finalizar .
fuente
Puede ser SSMS: cómo importar (copiar / pegar) datos de Excel puede ayudar (si no desea usar
BULK INSERT
o no tiene permisos para ello).fuente