sql >> Databáze >  >> RDS >> Sqlserver

Jak opravit problém s vloženým textovým kvalifikátorem při exportu dat do plochého souboru CSV?

Tuto odpověď bych nenabízel, kromě toho, že jste tak tvrdě pracovali na jejím zdokumentování a po měsíci byla přijata bez odpovědi. Takže, tady to jde. Zdá se, že jedinou možností je změnit data nebo změnit nástroj.

Když je nástroj rozbitý a prodejci je to jedno, je chybou to zkoušet dál. Je čas přejít. Vynakládáte velké úsilí na to, abyste přesně prozkoumali, jak je to rozbité, a prokázali, že porušuje nejen RFC, ale i předchozí verzi nástroje. Kolik dalších důkazů potřebujete?

CSV je také lodní kotva. Pokud máte tu možnost, je lepší použít běžný formát souboru s oddělovači. Pro mnoho aplikací je vhodné používat tabulátory. Nejlepší oddělovač IMO je '\', protože tento znak nemá v anglickém textu místo. (Na druhou stranu to nebude fungovat pro data obsahující cesty Windows.)

CSV má dva problémy jako formát výměny. Za prvé, není to všechno tak standardní; různé aplikace rozpoznávají různé verze, ať už RFC říká cokoli. Za druhé (a související) je, že nepředstavuje běžný jazyk v podmínkách CS, což je důvod, proč jej nelze analyzovat jako regulární výraz. Porovnejte s ^([^\t]*\t)*[\t]*$ pro řádek oddělený tabulátory. Praktickým důsledkem složitosti definice CSV je (viz výše) relativní nedostatek nástrojů k jejich manipulaci a jejich tendence být nekompatibilní, zejména v nočních hodinách.

Pokud zavedete CSV a DTS, máte dobré možnosti, jednou z nich je bcp.exe . Je to velmi rychlé a bezpečné, protože Microsoft nebyl po léta v pokušení aktualizovat. O DTS toho moc nevím, ale v případě, že ho musíte použít pro automatizaci, IIRC existuje způsob, jak vyvolat externí nástroje. Dejte si však pozor na bcp.exe nevrací spolehlivě chybový stav do shellu.

Pokud jste odhodláni používat DTS a držet se CSV, pak opravdu nejlepší zbývající možností je napsat pohled, který pro něj data vhodně připraví. Kdybych zacouval do tohoto rohu, vytvořil bych schéma nazvané, řekněme, "DTS2012CSV", abych mohl napsat select * from DTS2012CSV.tablename , což dává každému, koho to zajímá, šanci, aby to pochopil (protože to zdokumentujete, ne, v komentářích v textu pohledu?). V případě potřeby mohou ostatní zkopírovat jeho techniku ​​pro další rozbité extrakty.

HTH.



  1. Vestavěná nebo spravovaná instance Oracle pro integrační testy

  2. Třída modelu JPA pro pole TIMESTAMP BEZ VÝCHOZÍHO VÝCHODU ČASOVÉHO PÁSMA CURRENT_TIMESTAMP v Postgresu?

  3. Nutit nejprve kód, aby vždy inicializoval neexistující databázi?

  4. Jak převést řetězec na malá písmena v SQL