Quiero escribir un gran conjunto de datos de una base de datos de SQL Server 2005 utilizando BCP (programa de copia masiva).
Idealmente me gustaría hacer lo siguiente:
bcp MyDatabase..MyTable OUT STDOUT -c -t, |gzip -c c:\temp\dataset.csv.gz
Sin embargo, BCP simplemente escribe esto en un archivo literal llamado STDOUT.
También intenté:
bcp MyDatabase..MyTable OUT CON: -c -t, |gzip -c c:\temp\dataset.csv.gz
Pero esto vuelve y error de Error = [Microsoft][SQL Native Client]Unable to open BCP host data-file
.
Entonces, ¿puedo crear una tubería con nombre en cualquier lugar? He visto pistas en la web de alguna manera comenzando gzip
con un extremo atado a un nombre de archivo como \\. \ nombre_pipe - pero como se hace esto?
Actualizar : Tenga en cuenta que los propios Microsoft reconocen que realmente no les importa la eficiencia con SQL Server: http://connect.microsoft.com/SQLServer/feedback/details/337702/support-bcp-out-in-and-bulk-insert-compressed-or-named-pipe-support-at-least
Respuestas:
En Unix puedes usar mkfifo para este tipo de cosas, pero por lo que sé, no hay una herramienta de línea de comandos de Windows para crear o manipular canalizaciones con nombre. No son accesibles a las herramientas de línea de comandos de la forma en que lo son las rutas convencionales y UNC.
Puede crear una canalización con nombre en Perl utilizando Win32 :: Pipe, si conoce a Perl lo suficientemente bien. Y podría escribir un cliente Perl para extraer datos de la tubería y enviarlos a STDOUT, pero esto no se puede hacer con elegancia en Windows.
fuente
Dudo que puedas hacer eso, o incluso hacer que funcione. ¿Pero no sería más simple hacer esto en dos pasos?
fuente
¡Estaba buscando lo mismo!
Este tipo parece haber logrado bcp a gzip con un trabajo de fondo:
http://jcarlossaez.spaces.live.com/blog/cns!B3378F057444B65C!108.entry
fuente