2012-05-13 16 views
9

¿Cómo puedo especificar un archivo sql de entrada con una consulta larga cuando uso bcp? Traté de usar la opción -i pero sigue quejándose de un error en la línea de comandos sin información adicional. es posible?¿Puedo especificar un archivo sql de entrada con bcp?

+0

¿Ingreso de archivo SQL? No. Puede especificar un archivo de datos y un archivo de formato. Si desea utilizar SQL, quizás la inserción masiva sea una mejor opción. –

+0

@GordonLinoff: En realidad, estoy tratando de extraer datos de una tabla. Antes de esto, estaba haciendo un SELECT basado en una cadena y suministrándolo a bcp pero ahora tengo una consulta más larga. – Legend

+0

Puede crear una vista con la consulta, tal vez. –

Respuesta

3

Por lo que a mí respecta, la utilidad BCP solo admite consultas de Transact-SQL escritas directamente en la línea de comandos. Ej:

BCP "seleccione el nombre desde AdventureWorks.Sales.Currency" queryout Currency.Name.dat -T -c

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

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

en cuenta que se diferencia de la opción sqlcmd Utility "i":

Identifica el archivo que contiene un lote de instrucciones SQL o procedimientos almacenados. Múltiples archivos pueden ser especificado que será leído y procesado con el fin (...)

+0

+1 Gracias. ¿Sabría usted qué hacer cuando el comando 'SELECT' se hace demasiado largo? – Legend

+0

Nunca tuve que usar consultas largas yo mismo, pero una búsqueda rápida en Google da como resultado este enlace que puede serle útil: [FIX: Bcp.exe con una cadena de consulta larga puede dar como resultado una falla de aserción] (http://support.microsoft) .com/kb/279180) –

+2

Cuando me encontré con las consultas de salida de BCP que eran demasiado largas, recurrimos a almacenar vistas en la fuente. Nuestra consulta BCP puede ser simplemente "seleccionar x, y, z de [VER]" –

6

he tenido este problema hoy y encontré una solución conveniente, al menos en una situación ad-hoc.

Las tablas temporales pueden ser creadas por cualquier usuario con permisos de conexión. 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) utilizando SELECT ... INTO con una tabla temporal global, p.

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

A continuación, puede utilizar la tabla temporal en la consulta BCP con un simple

SELECT * FROM ##mytemptable 

A continuación, colocar la tabla temporal a través encargado de la empresa

DROP TABLE ##mytemptable 
+2

O simplemente 'bcp ## mytemptable out' ... – Neil

2

lo hice otra forma de corrección que .

Creo un archivo por lotes que lee un archivo y envía su contenido en bcp comando. 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 guión recibir dos parámetros:

  1. Nombre del archivo que tiene una consulta;
  2. Nombre de archivo para datos de exportación;

ejecutar un script en cmd así: exportación Query.bat query.sql export.txt

espero ayudado.

Cuestiones relacionadas