sql >> Databasteknik >  >> RDS >> Sqlserver

Hur fixar man problemet med inbäddad textkvalificering när man exporterar data till platt CSV-fil?

Jag skulle inte ge det här svaret förutom att du jobbade så hårt för att dokumentera det och att det har röstats fram utan att det har svarat efter en månad. Så här går det. Dina enda val verkar vara att ändra data eller ändra verktyget.

När verktyget är trasigt och leverantören inte bryr sig är det ett misstag att fortsätta försöka. Det är dags att byta. Du lägger ner mycket ansträngning på att undersöka exakt hur det är trasigt och att visa att det inte bara bryter mot RFC utan verktygets egen tidigare version. Hur mycket mer bevis behöver du?

CSV är också ett båtankare. Om du har möjlighet är det bättre att använda ett vanligt avgränsat filformat. För många applikationer är tabbavgränsad bra. Den bästa avgränsaren IMO är '\' eftersom det tecknet inte har någon plats i engelsk text. (Å andra sidan fungerar det inte för data som innehåller Windows-sökvägar.)

CSV har två problem som utbytesformat. För det första är det inte så standard; olika applikationer känner igen olika versioner, vad RFC än säger. För det andra (och relaterat) är att det inte utgör ett vanligt språk i CS-termer, varför det inte kan tolkas som ett reguljärt uttryck. Jämför med ^([^\t]*\t)*[\t]*$ för en tabbavgränsad rad. Den praktiska innebörden av komplexiteten i CSV:s definition är (se ovan) den relativa bristen på verktyg för att hantera dem och deras tendens att vara inkompatibla, särskilt under småtimmarna.

Om du startar CSV och DTS har du bra alternativ, varav ett är bcp.exe . Det är väldigt snabbt och säkert eftersom Microsoft inte har frestats att uppdatera det på flera år. Jag vet inte så mycket om DTS, men om du måste använda det för automatisering så finns det ett sätt att anropa externa verktyg på IIRC. Akta dig dock att bcp.exe returnerar inte felstatus till skalet på ett tillförlitligt sätt.

Om du är fast besluten att använda DTS och att hålla fast vid CSV, så är ditt bästa återstående alternativ att skriva en vy som förbereder data på lämpligt sätt för det. Jag skulle, om jag backades in i det hörnet, skapa ett schema som heter, säg, "DTS2012CSV", så att jag kunde skriva select * from DTS2012CSV.tablename , vilket ger alla som bryr sig en strid chans att förstå det (eftersom du kommer att dokumentera det, eller hur, i kommentarer i vytexten?). Om det behövs kan andra kopiera dess teknik för andra trasiga utdrag.

HTH.



  1. Hur man får namn och chefsnamn

  2. Oracle to_date() felaktig utdata

  3. Hur man installerar PostgreSQL 9.1 på OSX Lion

  4. Hur man uppdaterar materialiserad vy i oracle