none
Error al ejecutar una consulta con BCP RRS feed

  • Pregunta

  • Buenas tardes,

    Estoy intentando ejecutar la siguiente consulta para luego guardar el resultado de la misma en un archivo.

    El problema es que me esta dando el siguuiente error:

    exec master..xp_cmdshell 'bcp "SELECT DISTINCT A.campo1,A.campo2,B.campo3 from tabla1 A LEFT JOIN tabla2 B

    on A.campo1 = B.campo3 LEFT JOIN tabla3 C on B.campo3 = C.campo1

    where A.campo1 like ''%valor%''

    and A.campo4 NOT IN (''Valor1'',''Valor2'',''Valor3'') " queryout "C:\Pruebasssss\miPrueba.txt" -w -t "," -T -S localhost\SQLEXPRESS'

    Esto me arroja el siguiente error:

    NULL
    Starting copy...
    SQLState = S0002, NativeError = 208
    Error = [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]El nombre de objeto 'dbo.tabla1' no es válido.
    SQLState = S1000, NativeError = 0
    Error = [Microsoft][ODBC Driver 11 for SQL Server]Unable to resolve column level collations
    NULL
    BCP copy out failed
    NULL

    Pero la tabla existe perfectamente en la base.

    Me podrian decir si hay alguna comilla mal o como debo escribir los campos string dentro de una consulta de este tipo?

    Muchas Gracias.

    Oscar.

    viernes, 18 de agosto de 2017 20:25

Respuestas

  • Sí es necesario que nombres al objeto con las partes necesarias que especifiquen el contexto, no confíes sólo con el nombre de la tabla porque entonces se intentará buscar en la base de datos 'master' que imagino no es el contexto de las tablas que participan en la consulta sql.

    Por otro lado, ¿qué significa "no lo toma"?. Si intentas mostrar la cadena de caracteres que produce la concatenación el resultado es correcto (resumido):

    SELECT 'bcp "SELECT A.campo1 FROM tabla1 A WHERE A.campo4 NOT IN (''Valor1'',''Valor2'')"'
    
    bcp "SELECT A.campo1 FROM tabla1 A WHERE A.campo4 NOT IN ('Valor1','Valor2')"

    La consulta que se genera es correcta.


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.

    • Marcado como respuesta Moderador M lunes, 28 de agosto de 2017 4:18
    martes, 22 de agosto de 2017 16:20

Todas las respuestas

  • Debes cualificar al objeto con por lo menos tres partes, por ejemplo:

    EXEC master..xp_cmdshell N'bcp "SELECT DISTINCT A.campo1, A.campo2, B.campo3 
    			FROM 
    				DataBaseName.SchemaName.tabla1 A /*e.g.: dbProduccion.dbo.tabla1*/
    				LEFT JOIN DataBaseName.SchemaName.tabla2 B ON A.campo1 = B.campo3 
    				LEFT JOIN DataBaseName.SchemaName.tabla3 C ON B.campo3 = C.campo1
    			WHERE ...



    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Propuesto como respuesta MarianokMVP viernes, 18 de agosto de 2017 21:49
    viernes, 18 de agosto de 2017 21:34
  • Mi problema es que no toma un string dentro del comando bcp:

    exec master..xp_cmdshell 'bcp "SELECT DISTINCT A.campo1,A.campo2,B.campo3 from tabla1 A LEFT JOIN tabla2 B on A.campo1 = B.campo3 LEFT JOIN tabla3 C on B.campo3 = C.campo1
    where A.campo1 like ''%valor%''
    and A.campo4 NOT IN (''Valor1'',''Valor2'',''Valor3'') " queryout "C:\Pruebasssss\miPrueba.txt" -w -t "," -T -S localhost\SQLEXPRESS'

    Lo marcado en negrita no lo toma. Ese es mi problema.

    Muchas Gracias.

    Saludos,

    Oscar.

    martes, 22 de agosto de 2017 14:05
  • Sí es necesario que nombres al objeto con las partes necesarias que especifiquen el contexto, no confíes sólo con el nombre de la tabla porque entonces se intentará buscar en la base de datos 'master' que imagino no es el contexto de las tablas que participan en la consulta sql.

    Por otro lado, ¿qué significa "no lo toma"?. Si intentas mostrar la cadena de caracteres que produce la concatenación el resultado es correcto (resumido):

    SELECT 'bcp "SELECT A.campo1 FROM tabla1 A WHERE A.campo4 NOT IN (''Valor1'',''Valor2'')"'
    
    bcp "SELECT A.campo1 FROM tabla1 A WHERE A.campo4 NOT IN ('Valor1','Valor2')"

    La consulta que se genera es correcta.


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.

    • Marcado como respuesta Moderador M lunes, 28 de agosto de 2017 4:18
    martes, 22 de agosto de 2017 16:20