Nilai tidak dapat dikonversi karena potensi hilangnya data [ditutup]

12

Biarkan saya memulai dengan menjelaskan bahwa ini bukan pertanyaan duplikat , atau potensi duplikat dalam hal ini. Saya telah mencoba menerapkan setiap jawaban untuk setiap varian tunggal yang sudah ada dari masalah ini di StackOverflow dan DBA Stack Exchange, tanpa hasil.

Saya telah berjuang dengan masalah ini selama dua hari terakhir (mengerjakannya selama sekitar 7 jam sehari), dan bahkan setelah Googling masalah ini, tampaknya tidak ada orang lain yang memiliki varian persis yang sama dengan masalah saya.

Apa yang saya coba lakukan?

Di SSIS, saya mencoba membaca dari file CSV, dan menyisipkan baris dari itu ke dalam database OLE DB. Untuk itu, saya telah membuat pengaturan paling sederhana yang pernah ada, lihat di bawah.

  1. Flat File Source - membaca baris CSV.
  2. Derived Column - Saat ini tidak melakukan apa-apa (hanya ada untuk percobaan).
  3. Data Conversion - Saat ini tidak melakukan apa-apa (hanya ada untuk percobaan).
  4. OLE DB Destination - menyimpan baris dalam database.

Ketika saya mencoba menjalankannya, itu berhenti mengeksekusi di OLE DB Destination saya dengan pesan kesalahan berikut.

Ada kesalahan dengan kolom input "Jumlah" (187) pada input "OLE DB Tujuan Input" (51). Status kolom yang dikembalikan adalah: "Nilai tidak dapat dikonversi karena potensi hilangnya data.".

Kolom yang gagal ( Amount) saat ini bertipe DT_STR. Tampaknya itu tipe yang paling saya percayai saat ini.

Apa yang sudah saya coba?

  • Saya sudah mencoba menggunakan fungsi Flat File Connection"Sarankan Jenis" pada kolom yang gagal. Ini membuatnya merekomendasikan Single byte signed inttipe data.
    • Berhenti di Sumber File Flat saya .
    • Kesalahannya adalah Konversi data gagal. Konversi data untuk kolom "Jumlah" mengembalikan nilai status 2 dan teks status "Nilai tidak dapat dikonversi karena potensi hilangnya data.".
  • Saya sudah mencoba menggunakan Derived Columnuntuk melemparkan kolom ke dalam DT_I4.
    • Berhenti di Kolom Turunan Saya .
    • Kesalahannya adalah Konversi data gagal. Konversi data untuk kolom "Jumlah" mengembalikan nilai status 2 dan teks status "Nilai tidak dapat dikonversi karena potensi hilangnya data.".
  • Saya sudah mencoba menggunakan Data Conversionuntuk membuang nilai kolom saya ke a DT_I4.
    • Berhenti di saya Data Conversion.
    • Kesalahannya adalah Konversi data gagal. Konversi data untuk kolom "Jumlah" mengembalikan nilai status 2 dan teks status "Nilai tidak dapat dikonversi karena potensi hilangnya data.".
  • Saya sudah mencoba mengubah panjang DT_STRnilai saya di sumber dan tujuan.
    • Berhenti di sumber atau tujuan tergantung pada pengaturan.
  • Saya sudah mencoba menghubungkan menggunakan konektor Excel Source sebagai gantinya dengan dan tanpa IMEX=1ditambahkan ke string koneksi. Tidak berhasil

Pemahaman pemrograman saya memberi tahu saya bahwa saya kacau. Saya tidak pernah mengalami masalah sebesar ini untuk hal yang sederhana.

Dan mengapa saya tidak bisa mengabaikan "potensi" kehilangan data? Sungguh frustasi untuk sedikitnya.

Sistem saya

Ini adalah mesin Windows Server 2008 R2 dengan SQL Server 2008 diinstal. Mesin itu sendiri sepenuhnya diperbarui melalui Pembaruan Windows.

Mathias Lykkegaard Lorenzen
sumber
Sepertinya saya punya masalah dengan nilai (walaupun menarik dari Access) dan saya harus menggunakan halaman kode tertentu ketika saya melemparkan kolom. Saya tidak memiliki akses ke paket SSIS lagi untuk memeriksa apa yang saya lakukan.
Apa tipe data kolom yang ingin Anda sisipkan Amount?
Jon of All Trades
2
Buka Manajer Koneksi File Rata Anda untuk CSV. Buka tab Advanced dan pilih Amountkolom. Ambil tangkapan layar dan harap perbarui pertanyaan Anda dengan gambar ini.
billinkc
Punya peluang untuk melihat Connection Manager?
billinkc
1
Saya tidak percaya Anda kacau tetapi tanpa melihat definisi Connection Manager Anda, tidak mungkin untuk mengatakannya.
billinkc

Jawaban:

3

Saya telah mengalami hal ini beberapa kali dan masalahnya adalah ketidakcocokan tipe data dalam parameter ekspor / impor. Hal pertama yang harus dilakukan adalah memeriksa parameter tersebut dengan mengklik kanan pada sumber atau tujuan, memilih Editor Lanjutan. Buka Properti Input dan Output dan periksa tipe data untuk kolom itu untuk semua item - baik Eksternal, Output, dan Input. Saya biasanya melihat varian di sini, sering kali satu adalah Unicode (WSTR) dan I4 atau DSTR lainnya.

Mike
sumber
7

Mengabaikan kesalahan

Pertama-tama, Anda harus dapat mengabaikan pemotongan string dengan membuka Sumber File Rata, Output Kesalahan dan kemudian mengubah "Komponen Gagal" di bawah "Pemotongan" menjadi "Abaikan Kesalahan".

Solusi yang lebih baik

Masalah sebenarnya bisa jadi panjang string di dalam pipa SSIS masih salah karena diinisialisasi pada beberapa titik sebelumnya.

Anda dapat menentukan apakah itu masalahnya dengan mengklik dua kali panah hijau dari Sumber File Rata Anda (atau setelah Kolom yang Diperoleh / Konversi Data) dan memilih "Meta Data". Di sana Anda dapat melihat panjang bidang di dalam pipa.

Jika sudah sering melihat bahwa data meta tidak cocok dengan komponen sumber lagi, sebagian besar jika membuat Sumber File Flat DAN Koneksi yang terkait melalui Wisaya.

Saran saya adalah menghapus koneksi dan Sumber File Flat dan membuatnya kembali karena saya belum menemukan cara untuk mensinkronisasi ulang data meta pipa dengan komponen sumber.

Oliver Rahner
sumber
2
Ini tidak termasuk dalam "pemotongan". Saya sudah mencobanya.
Mathias Lykkegaard Lorenzen