Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Bulk insert

Estas en el tema de Bulk insert en el foro de SQL Server en Foros del Web. Buenas Tardes Tengo que cargar un achivo csv a sql server pero tengo un gran inconveniente con un caracter que me esta generando error en ...
  #1 (permalink)  
Antiguo 21/07/2010, 15:06
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Exclamación Bulk insert

Buenas Tardes

Tengo que cargar un achivo csv a sql server pero tengo un gran inconveniente con un caracter que me esta generando error en el bulk insert:

El archivo de ejemplo esta de la siguiente manera

1-.
Cita:
1;111;208;"Pend. Soporte y Sol Tec";;"";
1;222;210;"Pendiente; Solucion Comercial";;"";
La sentencia bulk la tengo de la siguiente manera

2-.
Código SQL:
Ver original
  1. BULK INSERT tabla
  2. FROM 'C:\archivo.txt'
  3. WITH(
  4. FIELDTERMINATOR=';'
  5. )

Pero tengo un inconveniente con el limitador ; Enla imagen 1.- en la segunda linea se puede observar en una de sus columnas tiene ese mismo caracter haciendo que se tome como una nueva columna pero en realidad pertenece a la misma
Cita:
"Pendiente; Solucion Comercial"
La pregunta es como podria hacer para que no tome ese ;

Espero me halla dado a entender y agradezco antemano por la colaboracion que me puedas prestar
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #2 (permalink)  
Antiguo 21/07/2010, 15:13
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Bulk insert

Que yo sepa, no se puede, el limitador entre columnas UNIVERSAL entre todos los motores es el caracter PIPE ( | ), pide al que te genera el archivo, lo cambie por este caracter.
  #3 (permalink)  
Antiguo 21/07/2010, 15:17
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: Bulk insert

Gracias por tu respuesta iislas, pero esa opcion no es posible. Sabes de otro comando que me pueda solucionar este problema ya que en mysql lo logre con LOAD DATA y el parametro ENCLOSED BY '\"' no existe algo similar en sql server?.

NOTA: Si la opcion es preprocesar el archivo tampoco puedo ya que el archivo pesa mas de 1GB

Saludos
__________________
:.:Nano.:: @nano_hard - Retornando al foro

Última edición por Nano_; 21/07/2010 a las 15:36 Razón: observacion faltante
  #4 (permalink)  
Antiguo 21/07/2010, 15:46
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Bulk insert

pues en la pagina de ayuda esta asi:

Código SQL:
Ver original
  1. BULK INSERT AdventureWorks2008R2.Sales.SalesOrderDetail
  2.    FROM 'f:\orders\lineitem.tbl'
  3.    WITH
  4.       (
  5.          FIELDTERMINATOR =' |',
  6.          ROWTERMINATOR =' |\n'
  7.       )
Saludos
  #5 (permalink)  
Antiguo 21/07/2010, 15:49
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: Bulk insert

Gracias por tu respuesta -rommel_ , pero eso lo tengo entendido y no es lo que busco ... De igual forma nuevamente gracias por tu colaboracion.
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #6 (permalink)  
Antiguo 21/07/2010, 16:10
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Bulk insert

y hay la posibilidad de validar la data antes de hacer el BULK?
  #7 (permalink)  
Antiguo 21/07/2010, 16:49
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Bulk insert

Como, ¿es un archivo plano que podria tener millones y millones de registros?, hipoteticamente.

Por eso mi recomendacion, NUNCA utilizar delimitadores que no sean los standar y el mas standar, es el PIPE
  #8 (permalink)  
Antiguo 21/07/2010, 17:48
 
Fecha de Ingreso: febrero-2009
Mensajes: 312
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Bulk insert

Hola.

Estas cosas, las solíamos solucionar con DTS (Data Transformation Services), ahora llamado Integration Services (SSIS)
Mira por google temas con Transformación de datos hay infinidad de recursos...
Tablas temporales, definición de campos, busquedas de texto, reemplazados, etc...
Saludos
  #9 (permalink)  
Antiguo 22/07/2010, 09:45
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Bulk insert

Entonces, tu propuesta mi estimado colega EJBSOFT, es poner a trabajar al servidor en reemplazar los caracteres ":" en un archivo PLANO ???, eso es lo que estoy entendiendo......
  #10 (permalink)  
Antiguo 22/07/2010, 10:59
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: Bulk insert

Saludos

Con el bulk insert definitivamente no se puede realizar este tipo de tratamientos sobre un archivo. Despues de tanto hechar cabeza y leer pude encontrar la solucion a mi incidente. Utilizando OPENROWSET. Lo posteo por si alguien le ocurre algo similar

Código SQL:
Ver original
  1. INSERT INTO tabla
  2. SELECT
  3. f1 campo1,
  4. CAST(f2 AS BIGINT) campo2,
  5. f3 campo3,
  6. f4 campo4,
  7. f5 campo5
  8. FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
  9.  'Text;Database=C:\carpeta;HDR=NO',
  10.  'select  * from archivo.txt')

Espero les sea de utilidad y a todo muchas gracias por sus aportes.

Hasta Pronto!.
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #11 (permalink)  
Antiguo 25/07/2010, 15:10
 
Fecha de Ingreso: febrero-2009
Mensajes: 312
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Bulk insert

Cita:
Iniciado por iislas Ver Mensaje
Entonces, tu propuesta mi estimado colega EJBSOFT, es poner a trabajar al servidor en reemplazar los caracteres ":" en un archivo PLANO ???, eso es lo que estoy entendiendo......

Hola, indudablemente no es la mejor solución, pero si no hay otra posibilidad...

En volcados de datos entre diferentes motores y temas de collation y lenguajes es habitual hacer este tipo de transformaciones

Saludos

Etiquetas: bulk, insert
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:53.