Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara memperbaiki masalah kualifikasi teks yang disematkan saat mengekspor data ke file datar CSV?

Saya tidak akan menawarkan jawaban ini kecuali bahwa Anda bekerja sangat keras untuk mendokumentasikannya dan telah ditingkatkan tanpa jawaban setelah sebulan. Jadi, ini dia. Satu-satunya pilihan Anda tampaknya adalah mengubah data atau mengubah alat.

Ketika alat rusak dan vendor tidak peduli, salah untuk terus mencoba. Saatnya untuk beralih. Anda berusaha keras untuk meneliti dengan tepat bagaimana itu rusak dan menunjukkannya tidak hanya melanggar RFC tetapi juga versi sebelumnya dari alat itu sendiri. Berapa banyak lagi bukti yang Anda butuhkan?

CSV adalah jangkar kapal juga. Jika Anda memiliki pilihan, Anda lebih baik menggunakan format file terbatas biasa. Untuk banyak aplikasi, tab-delimited bagus. IMO pembatas terbaik adalah '\' karena karakter tersebut tidak memiliki tempat dalam teks bahasa Inggris. (Di sisi lain, ini tidak akan berfungsi untuk data yang berisi nama path Windows.)

CSV memiliki dua masalah sebagai format pertukaran. Pertama, tidak semua standar itu; aplikasi yang berbeda mengenali versi yang berbeda, apa pun yang dikatakan RFC. Kedua (dan terkait) adalah bahwa itu bukan merupakan bahasa biasa dalam istilah CS, itulah sebabnya ia tidak dapat diuraikan sebagai ekspresi reguler. Bandingkan dengan ^([^\t]*\t)*[\t]*$ untuk garis tab-delimited. Implikasi praktis dari kompleksitas definisi CSV adalah (lihat di atas) relatif kelangkaan alat untuk menanganinya dan kecenderungannya untuk tidak kompatibel, terutama selama jam-jam larut.

Jika Anda memberi CSV dan DTS boot, Anda memiliki opsi yang bagus, salah satunya adalah bcp.exe . Ini sangat cepat, dan aman karena Microsoft tidak pernah tergoda untuk memperbaruinya selama bertahun-tahun. Saya tidak tahu banyak tentang DTS, tetapi jika Anda harus menggunakannya untuk otomatisasi, IIRC ada cara untuk memanggil utilitas eksternal. Hati-hati, bcp.exe tidak mengembalikan status kesalahan ke Shell dengan andal.

Jika Anda bertekad untuk menggunakan DTS dan tetap menggunakan CSV, maka pilihan terbaik Anda yang tersisa adalah menulis tampilan yang menyiapkan data dengan tepat untuk itu. Saya akan, jika didukung ke sudut itu, membuat skema yang disebut, katakanlah, "DTS2012CSV", sehingga saya dapat menulis select * from DTS2012CSV.tablename , memberi siapa pun yang peduli kesempatan untuk memahaminya (karena Anda akan mendokumentasikannya, bukan, dalam komentar di teks tampilan?). Jika perlu, orang lain dapat menyalin tekniknya untuk ekstrak rusak lainnya.

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. Menggunakan prosedur tersimpan di Entity Framework 5 dengan tipe kompleks?

  2. Membuat kolom yang dihitung di SQL Server 2008

  3. Mengapa SQL Server menambahkan integer 4 byte ke indeks berkerumun non-unik

  4. Membaca file MS Excel dari SQL Server 2005

  5. pertanyaan tentang menyalin database SQL Server