Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak naprawić problem z kwalifikatorem osadzonego tekstu podczas eksportowania danych do zwykłego pliku CSV?

Nie udzieliłbym tej odpowiedzi, z wyjątkiem tego, że tak ciężko pracowałeś, aby to udokumentować, a po miesiącu została ona przegłosowana bez odpowiedzi. Więc zaczyna się. Wydaje się, że jedynym wyborem jest zmiana danych lub zmiana narzędzia.

Gdy narzędzie jest zepsute, a sprzedawca nie dba o to, próbowanie dalej jest błędem. Czas się zmienić. Wkładasz dużo wysiłku w dokładne zbadanie, w jaki sposób jest zepsuty i zademonstrowanie, że narusza nie tylko RFC, ale także własną wcześniejszą wersję narzędzia. Ile więcej dowodów potrzebujesz?

CSV jest też kotwicą łodzi. Jeśli masz taką możliwość, lepiej użyj zwykłego formatu plików z ogranicznikami. W przypadku wielu aplikacji dobrze jest rozdzielać tabulatorami. Najlepszym ogranicznikiem IMO jest „\”, ponieważ ten znak nie ma miejsca w tekście angielskim. (Z drugiej strony nie będzie działać dla danych zawierających ścieżki Windows.)

CSV ma dwa problemy jako format wymiany. Po pierwsze, to nie wszystko jest takie standardowe; różne aplikacje rozpoznają różne wersje, niezależnie od tego, co powie RFC. Po drugie (i pokrewne) to, że nie stanowi zwykłego języka w terminologii CS, dlatego nie można go przeanalizować jako wyrażenia regularnego. Porównaj z ^([^\t]*\t)*[\t]*$ dla linii rozdzielanej tabulatorami. Praktyczną konsekwencją złożoności definicji CSV jest (patrz wyżej) względny brak narzędzi do ich obsługi i ich tendencja do niekompatybilności, szczególnie w godzinach porannych.

Jeśli uruchomisz CSV i DTS, masz dobre opcje, z których jedną jest bcp.exe . Jest bardzo szybki i bezpieczny, ponieważ Microsoft od lat nie miał ochoty go aktualizować. Nie wiem zbyt wiele o DTS, ale w przypadku, gdy musisz użyć go do automatyzacji, IIRC jest sposób na wywołanie zewnętrznych narzędzi. Uważaj jednak, że bcp.exe nie zwraca w sposób niezawodny stanu błędu do powłoki.

Jeśli jesteś zdeterminowany, aby używać DTS i trzymać się CSV, to naprawdę najlepszą pozostałą opcją jest napisanie widoku, który odpowiednio przygotuje dane. Gdybym był cofnięty w tym rogu, utworzyłbym schemat o nazwie, powiedzmy, "DTS2012CSV", aby móc napisać select * from DTS2012CSV.tablename , dając każdemu, kogo to obchodzi, szansę na zrozumienie tego (ponieważ będziesz to dokumentować, prawda, w komentarzach w tekście widoku?). Jeśli zajdzie taka potrzeba, inni mogą skopiować tę technikę do innych uszkodzonych fragmentów.

HTH.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uprawnienia SQL Server w przechowywanych procesach z dynamicznym SQL

  2. jak pominąć zły wiersz w źródle pliku płaskiego ssis?

  3. Praca z typem danych SQL Server XML

  4. Jak ustawić wartości domyślne w Entity Framework?

  5. Dowiedz się, czy obiekt jest tabelą zdefiniowaną przez użytkownika w SQL Server za pomocą OBJECTPROPERTY()