Я хочу записать большой набор данных из базы данных SQL Server 2005 с помощью BCP (программа массового копирования).
Идеально я хотел бы сделать следующее:
bcp MyDatabase..MyTable OUT STDOUT -c -t, |gzip -c c:\temp\dataset.csv.gz
Однако BCP просто пишет это в литеральный файл под названием STDOUT.
Я также попробовал:
bcp MyDatabase..MyTable OUT CON: -c -t, |gzip -c c:\temp\dataset.csv.gz
но это возвращается и ошибка Error = [Microsoft][SQL Native Client]Unable to open BCP host data-file
.
Так, я могу создать именованный канал где-нибудь? Я видел подсказки в сети так или иначе запуска gzip
с одним концом, связанным с именем файла как \\.\named_pipe - но как это сделано?
Обновление: Обратите внимание, что Microsoft самостоятельно acknowedge, что они действительно не заботятся об эффективности с SQL Server: http://connect.microsoft.com/SQLServer/feedback/details/337702/support-bcp-out-in-and-bulk-insert-compressed-or-named-pipe-support-at-least
На Unix можно использовать mkfifo для этого вида вещи, но насколько я знаю, нет никакого инструмента командной строки Windows, чтобы создать или управлять именованными каналами. Они не доступны для инструментов командной строки в способе, которым стандартные и пути UNC.
Можно создать именованный канал в Perl при помощи Win32:: Канал, если Вы знаете Perl достаточно хорошо. И Вы могли записать клиенту Perl, чтобы вытащить данные из канала и отправить его в STDOUT, но это действительно не может быть сделано изящно в Windows.
Я просто искал то же самое!
Этот парень, кажется, выполнил BCP к gzip w/фоновое задание:
http://jcarlossaez.spaces.live.com/blog/cns!B3378F057444B65C!108.entry