Mengonversi string Non Unicode ke Unicode string SSIS


9

Saya membuat paket di mana saya akan mengekspor data dari database ke file excel kosong. Ketika saya menambahkan hanya komponen sumber dan tujuan dan saya menjalankan paket saya mendapatkan kesalahan konversi yang menyatakan kolom Output dan kolom "A" tidak dapat mengkonversi antara tipe data string unicode dan non-unicode.

Untuk memperbaikinya saya menambahkan komponen konversi data dan mengkonversi semua kolom

"String Unicode [DT_WSTR]"

dan saya tidak lagi menerima kesalahan. Satu-satunya masalah adalah bahwa saya memiliki sekitar 50 kolom di mana saya harus pergi 1 per 1 dan pilih "Unicode String [DT_WSTR]" dari daftar drop-down. Saya kemudian harus masuk ke komponen tujuan dan memetakan kolom yang baru dikonversi ke file excel saya.

Pertanyaan saya adalah, jika ada orang lain yang menemukan ini, apakah ada cara yang lebih baik dan lebih efisien untuk berkeliling harus melakukan semua konversi tipe data manual? Harus mengkonversi dan memetakan semua kolom satu per satu tampaknya tidak praktis terutama jika Anda memiliki banyak baris.

Saya mengerti file excel bukan cara terbaik untuk mengimpor dan mengekspor data, tetapi itulah yang diperlukan dalam kasus khusus ini.

Saya mungkin mencari cara untuk hanya mengekspor ke file teks datar dan kemudian mencoba untuk mengkonversi ke excel sebagai langkah terakhir dalam paket. Saya hopping ini tidak akan memicu kesalahan konversi unicode / nonunicode yang sama.


bagaimana sindrom carpal tunnel Anda setelah itu? :-)
Patrick Honorez

Pastikan tabel tempat Anda memindahkan data menggunakan tipe data Unicode (yaitu: nvarchar (50) alih-alih varchar (50))
MacGyver

Jawaban:


15

Sebagai alternatif untuk RDC, saya hanya melewatkan konversi tipe data dalam SSIS dan secara eksplisit melemparkan mereka sebagai nvarchar dalam permintaan sumber saya.

Pemakaian

Dalam query sumber Anda (dan Anda sedang menggunakan query sumber dan tidak hanya memilih meja di drop down), secara eksplisit dilemparkan hal ke n sesuai (var) panjang arang.

Dari pada

SELECT
    E.BusinessEntityID
,   E.NationalIDNumber
,   E.LoginID
,   E.JobTitle
,   E.BirthDate
,   E.MaritalStatus
,   E.Gender
FROM
    HumanResources.Employee AS E

gunakan kueri seperti

SELECT
    CAST(E.BusinessEntityID AS nvarchar(10)) AS BusinessEntityID
,   CAST(E.NationalIDNumber AS nvarchar(15)) AS NationalIDNumber
,   CAST(E.LoginID AS nvarchar(256)) AS LoginID
,   CAST(E.JobTitle AS nvarchar(50)) AS JobTitle
,   CAST(E.BirthDate AS nvarchar(10)) AS BirthDate
,   CAST(E.MaritalStatus AS nchar(1)) AS MaritalStatus
,   CAST(E.Gender AS nchar(1)) AS Gender
FROM
    HumanResources.Employee AS E

Siswa yang cerdik dari AdventureWorks akan mengenali data yang sudah merupakan n(var)chartipe tetapi ini hanya untuk menunjukkan konsepnya.

Manfaat

  • Lebih sedikit memori yang digunakan. Saat ini, Anda akan mengalokasikan dan menyimpan dua salinan data "yang sama" dengan menggunakan Data Conversion ComponentSSIS
  • Tidak ada RSI . Tidak perlu mengklik N kali dan menentukan semua informasi itu di editor kecil mengerikan yang mereka sediakan. Saya akan menggunakan kueri terhadap dmv / information_schema untuk lebih lanjut mengotomatiskan generasi ekspor tabel "Excel ready".
  • Tidak ada instalasi komponen khusus. Saya telah bekerja di tempat-tempat di mana menginstal open source adalah verboten. Ada juga biaya perawatan yang ditangguhkan untuk menginstal aplikasi pihak ketiga karena sekarang "semua orang" perlu menginstal aplikasi yang sama untuk menjaga kode Anda dan itu perlu diinstal pada server dan infosec perlu memeriksa majelis untuk memastikan mereka valid dan kami perlu info dari bajillion orang yang melebihi Anda ...

1
"Sebagai alternatif untuk RDC" - Apakah RDC itu? Ketika saya membaca jawaban berikutnya, saya pikir Anda mungkin bermaksud Mengganti Komponen Data, tetapi karena penulis posting asli tidak menyebutkan komponen itu, mungkin terlalu dini untuk akronim. :-)
Thronk

berbicara tentang RSI, CONVERTharus lebih mudah untuk menyisipkan 50 kali daripada CAST, karena argumen di depan
Patrick Honorez


2

Jika Anda hanya perlu mengubah dari "string Unicode (DT_WSTR)" ke "string (DT_STR)" atau sebaliknya, maka Anda dapat melakukan ini:

  1. Simpan salinan file package.dtsx- Anda (jika Anda harus memulihkan)
  2. Buka package.dtsx di editor, atau di MS Visual Studio klik kanan pada paket dan pilih "Lihat Kode". Anda akan melihat File-XML.

Cari string DTS:DataTypejika diikuti oleh = "130", maka Kolom didefinisikan sebagai DT_WSTR (unicode).

Jika diikuti oleh = "129", maka Kolom didefinisikan sebagai DT_STR (non-unicode), gunakan pencarian dan gantikan dengan hati-hati (Anda membuat salinan sebelumnya, bukan?)

Simpan file dan mungkin ini dia.


1
Selamat datang di DBA SE! Kiat pro: situs ini memiliki berbagai fitur pemformatan teks untuk membuat tulisan Anda lebih baik. Gunakan ikon di bagian atas kotak teks editor.
peterh
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.