sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan løser man problemet med indlejret tekstkvalifikation, mens man eksporterer data til flad CSV-fil?

Jeg ville ikke tilbyde dette svar, bortset fra at du har arbejdet så hårdt for at dokumentere det, og det er blevet stemt op uden svar efter en måned. Så, her går. Dine eneste valg ser ud til at være at ændre dataene eller ændre værktøjet.

Når værktøjet er i stykker, og leverandøren er ligeglad, er det en fejl at blive ved med at prøve. Det er tid til at skifte. Du lægger en masse kræfter i at undersøge præcis, hvordan det er gået i stykker og demonstrerer, at det ikke kun overtræder RFC, men værktøjets egen tidligere version. Hvor meget mere bevis har du brug for?

CSV er også et bådanker. Hvis du har muligheden, er du bedre stillet ved at bruge et almindeligt afgrænset filformat. For mange applikationer er tabulatorafgrænset godt. Den bedste afgrænsning IMO er '\', fordi det tegn ikke har nogen plads i engelsk tekst. (På den anden side virker det ikke for data, der indeholder Windows-stinavne.)

CSV har to problemer som udvekslingsformat. For det første er det ikke helt standard; forskellige applikationer genkender forskellige versioner, uanset hvad RFC'en siger. For det andet (og relateret) er, at det ikke udgør et almindeligt sprog i CS-termer, hvorfor det ikke kan parses som et regulært udtryk. Sammenlign med ^([^\t]*\t)*[\t]*$ for en tabulatorafgrænset linje. Den praktiske konsekvens af kompleksiteten af ​​CSV's definition er (se ovenfor) den relative mangel på værktøjer til at håndtere dem og deres tendens til at være inkompatible, især i de små timer.

Hvis du giver CSV og DTS opstarten, har du gode muligheder, hvoraf en er bcp.exe . Det er meget hurtigt og sikkert, fordi Microsoft ikke har været fristet til at opdatere det i årevis. Jeg ved ikke meget om DTS, men i tilfælde af at du skal bruge det til automatisering, IIRC er der en måde at påkalde eksterne hjælpeprogrammer. Pas dog på, at bcp.exe returnerer ikke fejlstatus til shellen pålideligt.

Hvis du er fast besluttet på at bruge DTS og holde dig til CSV, så er din bedste tilbageværende mulighed virkelig at skrive en visning, der forbereder dataene korrekt til det. Jeg ville, hvis jeg blev bakket ind i det hjørne, oprette et skema kaldet for eksempel "DTS2012CSV", så jeg kunne skrive select * from DTS2012CSV.tablename , at give alle, der interesserer sig, en kamp chance for at forstå det (fordi du vil dokumentere det, vil du ikke, i kommentarer i visningsteksten?). Hvis det er nødvendigt, kan andre kopiere dens teknik til andre ødelagte udtræk.

HTH.



  1. Sådan hentes den systemgenererede kontrolbetingelse navn på tabelkolonne i Oracle

  2. Fejl ved lagring af geodjango PointField

  3. Hvordan kan jeg kortlægge en Java-dato til DATETIME i mysql (som standard dens TIMESTAMP) med Hibernate-annoteringer

  4. Ikke butik opdateretAt med sequelize model