¿Puedo especificar un file sql de input con bcp?

¿Cómo puedo especificar un file sql de input con una consulta larga cuando uso bcp? Intenté usar la opción -i pero sigue quejándose de un error en la command-line sin información adicional. es posible?

En lo que a mí respecta, la utilidad BCP solo admite consultas de Transact-SQL escritas directamente en la command-line. Ex:

bcp consulta "SELECT Name FROM AdventureWorks.Sales.Currency" Currency.Name.dat -T -c

Según su reference la opción "-i":

Especifica el nombre de un file de respuesta, que contiene las respuestas a las preguntas del símbolo del sistema para cada campo de datos cuando se realiza una copy masiva utilizando el modo interactivo (-n, -c, -w o -N no especificado).

Tenga en count que difiere de la opción sqlcmd Utility "-i":

Identifica el file que contiene un lote de instrucciones SQL o procedimientos almacenados. Se pueden especificar varios files que se leerán y procesarán en order (…)

Tuve este problema hoy y encontré una solución conveniente, al less en una situación ad-hoc.

Las tablas temporales pueden ser creadas por cualquier usuario con permissions de connection. Esto significa que también puede crear tablas temporales GLOBAL.

Simplemente ejecute su consulta en el administrador de la empresa (o sql cmd o lo que sea) usando SELECT … INTO con una tabla temporal global, por ejemplo

 SELECT * INTO ##mytemptable FROM SomeTable WHERE [massive where clause, for example] 

Luego puede usar la tabla temporal en la consulta BCP con un simple

 SELECT * FROM ##mytemptable 

A continuación, suelte la tabla temporal a través del administrador de la empresa

 DROP TABLE ##mytemptable 

Hice otra manera de arreglar eso.

Creo un file por lotes que lee un file y envía su contenido en el command bcp . Ver:

 @ECHO off SETLOCAL EnableDelayedExpansion SET queryFile=%1 SET outFileName=%2 FOR /F "delims=" %%i IN (%queryFile%) DO SET join=!join! %%i ECHO %join% bcp "%join%" queryout %outFileName% /S.\SQLE_CAESAR /d /c /t"|" /T 

Ese script recibe dos parameters:

  1. Nombre de file que tiene una consulta;
  2. Nombre de file para exportar datos;

Ejecute un script en cmd como ese: export-query.bat query.sql export.txt

Espero ayudó.