stephanc
Goto Top

MS SQL 2008: Abfrage in Datei speichern

Hallo Zusammen,

ich soll jeden Tag zu einer bestimmten Uhrzeit diverse Daten in einer Datei zur Verfügung stellen.
Die Abfrage für die Daten habe ich schon gebaut und als views angelegt. Nun muss ich diese Daten aber auch noch in eine
Datei einfügen, wobei die Felder eine vorgeschrieben Länge haben und hintereinander weggeschrieben werden müssen - also ohne Trennzeichen.

Beispiel:
Santa...........Claus......Himmelspforte.2........4711 Nordpol
Chris............Cringel....Suedufer.12..............4916.Oakland

Ich habe es schon mit dem DTS probiert, treffe hier aber auf das Problem, das kein Zeilenumbruch statt findet.
Am liebsten wäre mir ein entsprechendes "Select into test.txt" was ich täglich per Agent anstossen kann - wer kann helfen ?

Gruß,
Stephan

Content-ID: 237519

Url: https://administrator.de/contentid/237519

Ausgedruckt am: 26.11.2024 um 14:11 Uhr

gempalizer
gempalizer 09.05.2014 um 08:57:19 Uhr
Goto Top
Hallo Stephan

Schau dir diesbezüglich mal das Hilfsprogramm bcp an. Dieses kannst du in einem Batch-File anschupsen um eine Query abzusetzen und die Ergebnisse in ein txt-File zu schreiben (mit queryout).
Sollte etwa so aussehen (die diversen Parameter findest du im Netz, habe diese nicht mehr im Kopf):

bcp "Select * from Table where x=1" queryout "C:\test.txt"

http://msdn.microsoft.com/de-ch/library/ms162802.aspx

Hoffe dies hilft dir weiter. Grusss Thomas
StephanC
StephanC 09.05.2014 um 10:47:43 Uhr
Goto Top
Hallo Thomas,

mit bcp habe ich es schon versucht - nur habe ich hier das Problem, das die Dokumentation mehr als dürftig ist.
Vielleicht hast Du einen Tipp für mich, wie ich eine Datei erzeuge mit fester Ausgabebreite bzw. fester Länge ?

Gruß,
Stephan
gempalizer
Lösung gempalizer 09.05.2014 aktualisiert um 22:09:24 Uhr
Goto Top
Hoi Stephan

Ja, du hast recht. Die Dokumentationen zu bcp sind eher dürftig.

Wäre allenfalls sqlcmd was?

Bsp:

"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\sqlcmd.exe" -S Server\Instanz -d DBName -E -Q "Select x From y" -o "C:\test.txt" -h-1 -w 700

-h-1 entfernt die Spaltenheader
-w gibt die Spaltenbreite an.

Hab ich hier gefunden: http://de.depconline.com/49272
StephanC
StephanC 09.05.2014 um 21:56:43 Uhr
Goto Top
Hallo Thomas,

wir nähern uns ;)
Jetzt muss ich nur noch wissen, wie ich die Feldlänge angeben kann und diese dann abgeschnitten bzw. auch aufgefüllt wird,
Also:
Vorname 20 Zeichen
Nachname 30 Zeichen
Strasse 30 Zeichen
Bedeutet, das ab Zeichen 51 immer die Strasse anfängt). XML will der Empfänger leider nicht face-sad


Ich bin kurz davor ein neus Projewkt in VB6 zu schreiben - aber das muss doch auch mit Bordmitteln des SQL-Servers gehen ?!

Gruß,
Stephan
gempalizer
gempalizer 12.05.2014 um 09:04:13 Uhr
Goto Top
Hallo Stephan

Hast du mittlerweile schon eine Lösung für dein Problem gefunden?

Ev. könntest du per For-Schleife unterschiedliche Trennzeichen zwischen den Werten einfügen und danach je nach Trennzeichen und Länge des Wertes die Formatierung / Spaltenbreite durchführen.
gempalizer
gempalizer 12.05.2014 um 10:42:51 Uhr
Goto Top
Ich habe mich nochmals damit befasst. Für das Vorhaben wäre anscheinend bcp schon der richtige Weg, da man dabei zuerst ein Format-File erzeugen und sich danach per bcp darauf beziehen kann. Da du ja bereits eine View für deine Daten hast, kannst du das Format-File in Bezug zur View anlegen.

Folgender Link sollte dir weiterhelfen: https://www.simple-talk.com/sql/database-administration/working-with-the ...