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

Uso de CASE WHEN en proceso BCP

Estas en el tema de Uso de CASE WHEN en proceso BCP en el foro de SQL Server en Foros del Web. Buenos días. Me encuentro con el siguiente problema. Tengo una consulta que ejecuto mediante BCP, para extraer un fichero CSV con una serie de columnas. ...
  #1 (permalink)  
Antiguo 26/09/2012, 12:41
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 18 años
Puntos: 9
Uso de CASE WHEN en proceso BCP

Buenos días.
Me encuentro con el siguiente problema.
Tengo una consulta que ejecuto mediante BCP, para extraer un fichero CSV con una serie de columnas.
Hasta el momento había funcionado perfectamente.
El problema que tengo ahora es que he querido añadirle una columna más, y al añadirle esta columna el proceso deja de generar el fichero CSV. Si la quito y lo dejo como estaba, vuelve a generar el fichero correctamente.
Entonces, esto básicamente me dice que el problema lo tengo en esa nueva columna.
Sería esto:
Código SQL:
Ver original
  1. SELECT
  2. Campo1,
  3. Campo2,
  4. CASE WHEN Campo3>0 THEN Campo3 ELSE 0 END AS Descuento
  5. FROM ...
Lo único que he añadido es la última columna (Descuento) y lo único extraño que le veo es que hago uso de la cláusula CASE WHEN, pero hasta donde yo sé, esto no es ningún problema, no? O si...
Intento buscar información relacionada con el uso de CASE WHEN en procesos BCP, pero aparentemente no parece haber ningún problema.
Espero puedan hecharme una mano para salir de este atoyadero.
Gracias por su ayuda.
Saludos.
__________________
..:: moNTeZIon ::..
  #2 (permalink)  
Antiguo 26/09/2012, 12:50
Avatar de Alexis_Mejias  
Fecha de Ingreso: enero-2005
Ubicación: Santiago
Mensajes: 77
Antigüedad: 18 años
Puntos: 17
Respuesta: Uso de CASE WHEN en proceso BCP

Es posible que Descuento te devuelva NULL??

Si es Asi puede ser ese tu problema.

ISNULL(Campo3, 0) con eso lo arreglas

Saludos!
__________________
Alexis Mejias C.
Freelancer Chile - Si te sirvió puntúa positivo
Blog Personal
  #3 (permalink)  
Antiguo 26/09/2012, 13:37
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 16 años, 5 meses
Puntos: 774
Respuesta: Uso de CASE WHEN en proceso BCP

si estas usando bcp quizas tengas un archivo de formato, si agregas una columna a tu select tienes que agregar la columna en el archivo de formato:

bcp "select * from tabla" queryout c:\file.csv -f e:\table_format.xml -S "server" -U "user" -P "pass"

algo asi :)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 26/09/2012, 15:31
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 18 años
Puntos: 9
Respuesta: Uso de CASE WHEN en proceso BCP

Gracias por vuestras respuestas.
La verdad es que no estoy usando ningún archivo de formato. Quizá ese sea el problema... ¿Es posible?
Para la pregunta de si devuelve NULL, pues no. Esa misma consulta puedo ejecutarla en el Management Studio y me devuelve los resultados correctamente.
No quería hacerlo, pero quizá sea mejor así, os dejo todo el chorretón, a ver si es que puede haber algo extraño. Al fin y al cabo es bastante sencillo:
Código SQL:
Ver original
  1. DECLARE @command VARCHAR(1000)
  2. SET @command = 'BCP "SELECT LTRIM(RTRIM([CodigoProducto])) AS CodigoProducto, LTRIM(RTRIM([CodigoSubFamilia])) AS CodigoSubFamilia, LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE([Nombre1],CHAR(10),""\n""),CHAR(13),""\n""),""  "",""\n""),"";"","",""))) AS Nombre, [PrecioUnidad1] AS PrecioUnidad1, CASE WHEN DtoImporteP>0 AND ImporteDtoP<=0 THEN DtoImporteP ELSE 0 END AS Descuento FROM tabla ORDER BY CodigoSubFamilia, Nombre1" queryout "C:\tabla.csv" -w -t; -T'
  3. EXEC master..xp_cmdshell @command
Como he comentado, si a todo esto le quito la última columna de la SELECT, entonces genera el fichero CSV correctamente, como lleva tiempo haciéndolo.
No sé por qué el hecho de añadir esa columna deja de generar el fichero.
Cualquier comentario se agradece.
Saludos.
__________________
..:: moNTeZIon ::..

Última edición por moNTeZIon; 26/09/2012 a las 15:37
  #5 (permalink)  
Antiguo 26/09/2012, 15:55
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 16 años, 5 meses
Puntos: 774
Respuesta: Uso de CASE WHEN en proceso BCP

prueba con un archivo de formato :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 26/09/2012, 16:12
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 18 años
Puntos: 9
Respuesta: Uso de CASE WHEN en proceso BCP

Ok, voy a ver qué encuentro sobre cómo hacer el archivo de formato.
Si tienes algún enlace donde lo explique claro y simple te lo agradecería.
Gracias Libras!
__________________
..:: moNTeZIon ::..
  #7 (permalink)  
Antiguo 26/09/2012, 16:53
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 16 años, 5 meses
Puntos: 774
Respuesta: Uso de CASE WHEN en proceso BCP

Cita:
Iniciado por moNTeZIon Ver Mensaje
Ok, voy a ver qué encuentro sobre cómo hacer el archivo de formato.
Si tienes algún enlace donde lo explique claro y simple te lo agradecería.
Gracias Libras!
aqui:

http://msdn.microsoft.com/en-us/library/ms191516.aspx

la siempre magica ayuda de microsoft :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: bcp, case, proceso, select, campos
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 17:45.