it-swarm-ja.com

Windowsで名前付きパイプを作成する

BCP(バルクコピープログラム)を使用して、SQL Server2005データベースから大きなデータセットを作成したいと思います。

理想的には、次のことを行いたいと思います。

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で始まり、一方の端が\\。\のようなファイル名に関連付けられているというヒントをWebで見ました。名前付きパイプ -しかし、これはどのように行われますか?

更新:Microsoft自身が、SQL Serverの効率を本当に気にしていないことを認めていることに注意してください: http://connect.Microsoft.com/SQLServer/feedback/details/337702/support-bcp-out-in-and -bulk-insert-compressed-or-named-pipe-support-at-least

6
PP.

Unixでは、この種のことにはmkfifoを使用できますが、私が知る限り、名前付きパイプを作成または操作するためのWindowsコマンドラインツールはありません。従来のパスやUNCパスのように、コマンドラインツールからアクセスすることはできません。

Perlを十分に理解している場合は、Win32 :: Pipeを使用してPerlで名前付きパイプを作成できます。また、パイプからデータを引き出してSTDOUTに送信するPerlクライアントを作成することもできますが、これをWindowsでエレガントに行うことはできません。

2
njd

私は同じものを探していました!

この男は、バックグラウンドジョブを使用してbcpからgzipを実行したようです。

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

1
Peter Radocchia

私はあなたがそれをすることができるか、あるいはそれを機能させることさえできるとは思えません。しかし、これを2つのステップで行う方が簡単ではないでしょうか。

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