6

Я хочу написать большой набор данных из базы данных 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 признают, что они действительно не заботятся об эффективности с SQL Server: http://connect.microsoft.com/SQLServer/feedback/details/337702/support-bcp-out-in-and-bulk- вставить сжатый или названные однотрубную Опорно-на- крайней мере ,

3 ответа3

1

Я просто искал то же самое!

Этот парень, кажется, выполнил bcp to gzip с фоновой работой:

http://jcarlossaez.spaces.live.com/blog/cns!B3378F057444B65C!108.entry

1

В Unix вы можете использовать mkfifo для такого рода вещей, но, насколько я знаю, в Windows нет инструмента командной строки для создания именованных каналов или манипулирования ими. Они недоступны для инструментов командной строки, как обычные и UNC-пути.

Вы можете создать именованный канал в Perl, используя Win32::Pipe, если вы достаточно хорошо знаете Perl. И вы могли бы написать Perl-клиент, который будет извлекать данные из канала и отправлять их в STDOUT, но в Windows это действительно невозможно сделать элегантно.

1

Я сомневаюсь, что вы можете сделать это, или даже заставить его работать. Но не будет ли проще сделать это в два этапа?

bcp MyDatabase..MyTable OUT c:\temp\dataset.csv -c -t,
gzip c:\temp\dataset.csv

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .