Named Pipe unter Windows erstellen

3826
PP.

Ich möchte ein großes Dataset aus einer SQL Server 2005-Datenbank mit BCP (Bulk Copy-Programm) schreiben.

Im Idealfall möchte ich Folgendes tun:

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

BCP schreibt dies jedoch nur in eine Literaldatei namens STDOUT.

Ich habe auch versucht:

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

Aber das kehrt zurück und ein Fehler von Error = [Microsoft][SQL Native Client]Unable to open BCP host data-file.

Kann ich also irgendwo eine Named Pipe erstellen? Ich habe im Web Hinweise gesehen, die irgendwie gzipmit einem Ende beginnen, das an einen Dateinamen wie \\. \ Named_pipe gebunden ist - aber wie wird das gemacht?

Update : Beachten Sie, dass Microsoft selbst anerkennt, dass es ihnen mit SQL Server nicht wirklich an der Effizienz liegt: http://connect.microsoft.com/SQLServer/feedback/details/337702/support-bcp-out-in-and-bulk- Insert-Compressed-or-Named-Pipe-Support-mindestens

6
Warum sind die einfachsten Dinge in der Microsoft-Welt so gut wie unmöglich? PP. vor 14 Jahren 1
Weil aus einer "Mehrheit der Endkunden-Kundenbasis" dies nicht in der "einfachen Liste der Dinge, die ich machen möchte" steht. Windows hat unterschiedliche Prioritäten. Offensichtlich hat es mit einem so großen Schub in Linux etwas richtig gemacht, um die GUI zu verbessern, um Windows einzuholen ... Übrigens, ich bin ein Linux-Benutzer, der sich lange Zeit auskennt und ich hasse Fenster Dan McGrath vor 14 Jahren 1

3 Antworten auf die Frage

1
njd

Unter Unix können Sie mkfifo für diese Art von Dingen verwenden, aber meines Wissens gibt es kein Windows-Befehlszeilenprogramm zum Erstellen oder Bearbeiten von Named Pipes. Sie sind für Befehlszeilen-Tools nicht auf die Art und Weise zugänglich, in der herkömmliche und UNC-Pfade verwendet werden.

Sie können ein benanntes Pipe in Perl mithilfe von Win32 :: Pipe erstellen, wenn Sie Perl gut genug kennen. Sie könnten auch einen Perl-Client schreiben, um Daten aus der Pipe abzurufen und an STDOUT zu senden. Dies kann jedoch in Windows wirklich nicht elegant ausgeführt werden.

1
shf301

Ich bezweifle, dass Sie das tun können oder es sogar zum Laufen bringen. Aber wäre es nicht einfacher, dies in zwei Schritten zu tun?

bcp MyDatabase..MyTable OUT c:\temp\dataset.csv -c -t, gzip c:\temp\dataset.csv 
Ja, es wäre einfacher, birgt aber auch das Risiko, zu viel lokalen Speicherplatz zu beanspruchen, und schreibt Daten unnötig und liest sie erneut. Es ist eine ineffiziente Sache. PP. vor 14 Jahren 1
1
Peter Radocchia

Ich habe nur das Gleiche gesucht!

Dieser Kerl scheint es geschafft zu haben, dass bcp mit einem Hintergrundjob gzip ist:

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