SQL Server - Problemas con BULK INSERT

 
Vista:
sin imagen de perfil
Val: 67
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Problemas con BULK INSERT

Publicado por Ana (34 intervenciones) el 22/11/2017 16:28:14
Hola,

Me llega un csv, separado por punto y coma, y los campos entre comillas, yo he realizado lo siguiente:

SET @sql = N'BULK INSERT #tableTMP
FROM ''' + @filePath + '''
WITH (
DATAFILETYPE = ''char'',
FIRSTROW = 2,
MAXERRORS = 0,
FIELDTERMINATOR ='';'',
ROWTERMINATOR = ''0x0A'',
TABLOCK,
KEEPNULLS
)'

EXEC(@sql)

Lo inserto en una tabla temporal y después lo paso a una tabla de la BBDD, remplazando las dobles comillas por nada (REPLACE(campo, '"', '')).

Pero ahora tengo un problema, que dentro de un campo me viene con punto y coma, me viene así:
"campo1";"campo2";"campo3;lo que sea";"campo4"

Por lo que me da error.

Y no logro quitar el punto y coma del campo.


Muchas gracias por adelantado.

Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Problemas con BULK INSERT

Publicado por Isaias (4558 intervenciones) el 22/11/2017 16:58:48
En tu archivo CSV, reemplaza ";" por "|", terminas con el problema
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 67
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Problemas con BULK INSERT

Publicado por Ana (34 intervenciones) el 22/11/2017 17:15:05
¿Pero como se reemplaza?

Ya que ese csv, solo lo puedo tratar desde SQL SERVER, eso es lo que no se como hacerlo.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 67
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Problemas con BULK INSERT

Publicado por Ana (34 intervenciones) el 22/11/2017 17:40:19
Eso si lo se, pero como he comentado antes, es un fichero que me viene y lo ejecuta una tarea programada, y en esa tarea programada es lo que tengo que programar para que cambie los ; por |.

Muchas gracias.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Problemas con BULK INSERT

Publicado por Isaias (4558 intervenciones) el 22/11/2017 19:07:56
Veamos, hice unas pruebas y lo unico que cambie fue:

FIELDTERMINATOR ='";"',

Comitas simples (') y luego doble " comita, as el punto y coma ;

Comenta, si fue la solucioin

Aunque si quieres erradicar el error de raiz y evitarte muchos dolores de cabez, dile a la gente que te manda el archivo que el separador internacional para los archivos planos (txt, csv, etc) es el PIPE (|), que te lo manden con ese separador.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 67
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Problemas con BULK INSERT

Publicado por Ana (34 intervenciones) el 23/11/2017 09:03:29
Hola,

No me ha servido.

Necesito, de alguna manera, poder modificar el ;, por algún otro carácter desde código SQL Server.

Muchas gracias.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Problemas con BULK INSERT

Publicado por Isaias (4558 intervenciones) el 23/11/2017 18:45:49
Yo hice la prueba y subio sin problemas, ¿me puedes regalar parte de tu archivo CSV para hacer una prueba real con tus datos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 67
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Problemas con BULK INSERT

Publicado por Ana (34 intervenciones) el 24/11/2017 11:29:15
Hola,

Te adjunto el archivo.

Hay que modificar el ; que suele ir en la dirección por una coma, pero sin abrir el archivo, es decir, haciéndolo todo desde el código de SQL Server.

Mi idea es abrir el fichero csv mediante el OPENROWSET, meterlo en un select modificar el campo que quiero mediante un replace, eso es lo que estoy intentando hacer ahora, pero no se si resultara efectivo.

Muchas gracias.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Problemas con BULK INSERT

Publicado por Isaias (4558 intervenciones) el 24/11/2017 19:41:50
Gracias

¿Me pasas el script de creacion de tu tabla #tableTMP?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Problemas con BULK INSERT

Publicado por Isaias (4558 intervenciones) el 24/11/2017 20:06:47
Hola nuevamente

Si deseas trabajar con OPENROWSET, te dejo esta liga donde te indica el procedmiento a seguir

https://www.toadworld.com/platforms/sql-server/b/weblog/archive/2015/02/09/t-sql-read-csv-files-using-openrowset

Checa esta prueba

1
2
3
4
5
6
create table #prueba (prueba varchar(max))
insert into #prueba
SELECT * FROM OPENROWSET(
BULK 'c:\temp\prueba\prueba.csv',
SINGLE_CLOB) AS DATA;
select * from #prueb
a
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar