sql >> Database >  >> RDS >> Sqlserver

Hoe het probleem met de ingesloten tekstkwalificatie op te lossen tijdens het exporteren van gegevens naar een plat CSV-bestand?

Ik zou dit antwoord niet geven, behalve dat je zo hard hebt gewerkt om het te documenteren en dat het na een maand zonder antwoord is gestemd. Dus, hier gaat het. Uw enige keuzes lijken te zijn om de gegevens te wijzigen of de tool te wijzigen.

Als het gereedschap kapot is en het de verkoper niets kan schelen, is het een vergissing om het te blijven proberen. Het is tijd om over te schakelen. Je hebt veel moeite gedaan om te onderzoeken hoe het precies kapot is gegaan en door aan te tonen dat het niet alleen de RFC schendt, maar ook de eerdere versie van het hulpprogramma. Hoeveel meer bewijs heb je nodig?

CSV is ook een bootanker. Als je de mogelijkheid hebt, kun je beter een gewone bestandsindeling met scheidingstekens gebruiken. Voor veel toepassingen is tab-gescheiden goed. Het beste scheidingsteken IMO is '\' omdat dat teken geen plaats heeft in Engelse tekst. (Aan de andere kant werkt het niet voor gegevens die Windows-padnamen bevatten.)

CSV heeft twee problemen als uitwisselingsformaat. Ten eerste is het niet zo standaard; verschillende applicaties herkennen verschillende versies, wat de RFC ook zegt. Ten tweede (en gerelateerd) is dat het geen gewone taal is in CS-termen, daarom kan het niet worden geparseerd als een reguliere expressie. Vergelijk met ^([^\t]*\t)*[\t]*$ voor een door tabs gescheiden regel. De praktische implicatie van de complexiteit van de definitie van CSV is (zie hierboven) het relatieve gebrek aan hulpmiddelen om ze te hanteren en hun neiging om onverenigbaar te zijn, vooral tijdens de vroege uurtjes.

Als je CSV en DTS opstart, heb je goede opties, waaronder bcp.exe . Het is erg snel en veilig omdat Microsoft al jaren niet in de verleiding komt om het bij te werken. Ik weet niet veel over DTS, maar voor het geval je het moet gebruiken voor automatisering, IIRC is er een manier om externe hulpprogramma's aan te roepen. Pas echter op, dat bcp.exe retourneert de foutstatus niet betrouwbaar naar de shell.

Als u vastbesloten bent om DTS te gebruiken en bij CSV te blijven, dan is uw beste optie om een ​​weergave te schrijven die de gegevens op de juiste manier voorbereidt. Ik zou, als ik me in die hoek bevond, een schema maken met de naam "DTS2012CSV", zodat ik select * from DTS2012CSV.tablename zou kunnen schrijven , waardoor iedereen die erom geeft een kans krijgt om het te begrijpen (omdat je het documenteert, nietwaar, in opmerkingen in de weergavetekst?). Indien nodig kunnen anderen zijn techniek kopiëren voor andere gebroken extracten.

HTH.



  1. Voorkom dat datum en tijd in de database worden ingevoegd

  2. Overerving in databaseontwerp

  3. Naamloze SQL-parameters instellen in SqlCommand

  4. Een gemeenschappelijke MS SQL Server-prestatie-indicator implementeren