Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie behebt man das Problem mit dem eingebetteten Textqualifizierer beim Exportieren von Daten in eine CSV-Flat-Datei?

Ich würde diese Antwort nicht anbieten, es sei denn, Sie haben so hart daran gearbeitet, sie zu dokumentieren, und sie wurde nach einem Monat ohne Antwort positiv bewertet. Also, los geht's. Ihre einzige Wahl scheint zu sein, die Daten zu ändern oder das Werkzeug zu ändern.

Wenn das Werkzeug kaputt ist und es dem Anbieter egal ist, ist es ein Fehler, es weiter zu versuchen. Es ist Zeit zu wechseln. Sie haben sich viel Mühe gegeben, genau zu recherchieren, wie es kaputt ist, und zu zeigen, dass es nicht nur gegen den RFC, sondern auch gegen die eigene frühere Version des Tools verstößt. Wie viel mehr Beweise brauchen Sie?

CSV ist auch ein Bootsanker. Wenn Sie die Möglichkeit haben, verwenden Sie besser ein gewöhnliches Dateiformat mit Trennzeichen. Für viele Anwendungen ist tabulatorgetrennt gut. Das beste Trennzeichen ist meiner Meinung nach '\', da dieses Zeichen im englischen Text keinen Platz hat. (Auf der anderen Seite funktioniert es nicht für Daten, die Windows-Pfadnamen enthalten.)

CSV hat als Austauschformat zwei Probleme. Erstens ist es nicht so Standard; verschiedene Anwendungen erkennen verschiedene Versionen, was auch immer der RFC sagen mag. Zweitens (und verwandt) ist, dass es keine reguläre Sprache darstellt in CS-Begriffen, weshalb es nicht als regulärer Ausdruck geparst werden kann. Vergleichen Sie mit ^([^\t]*\t)*[\t]*$ für eine tabulatorgetrennte Zeile. Die praktische Auswirkung der Komplexität der CSV-Definition ist (siehe oben) der relative Mangel an Werkzeugen, um sie zu handhaben, und ihre Tendenz, insbesondere in den frühen Morgenstunden inkompatibel zu sein.

Wenn Sie CSV und DTS booten, haben Sie gute Optionen, von denen eine bcp.exe ist . Es ist sehr schnell und sicher, da Microsoft seit Jahren nicht mehr versucht ist, es zu aktualisieren. Ich weiß nicht viel über DTS, aber falls Sie es für die Automatisierung verwenden müssen, IIRC gibt es eine Möglichkeit, externe Dienstprogramme aufzurufen. Passen Sie jedoch auf, dass bcp.exe gibt den Fehlerstatus nicht zuverlässig an die Shell zurück.

Wenn Sie entschlossen sind, DTS zu verwenden und bei CSV zu bleiben, dann ist es wirklich die beste verbleibende Option, eine Ansicht zu schreiben, die die Daten entsprechend darauf vorbereitet. Ich würde, wenn ich mich in diese Ecke zurückziehen würde, ein Schema mit dem Namen "DTS2012CSV" erstellen, damit ich select * from DTS2012CSV.tablename schreiben könnte , was jedem, der sich dafür interessiert, eine Chance gibt, es zu verstehen (weil Sie es in Kommentaren im Ansichtstext dokumentieren werden, nicht wahr?). Bei Bedarf können andere seine Technik für andere gebrochene Extrakte kopieren.

HTH.