SSIS terus memaksa mengubah string sumber excel ke float

9

Ada kolom di Excel yang seharusnya berupa teks, tetapi SSIS melihat teks numerik di sana dan secara otomatis membuatnya menjadi float presisi ganda [DT_R8].

Saya dapat mengubahnya secara manual di kolom Eksternal dan Output cabang Output, tetapi Output Kesalahan menolak untuk membiarkan saya mengubah kolom masing-masing.

Error at Extract Stations [Excel Source [1]]: The data type for "output "Excel Source Error Output" (10)" cannot be modified in the error "output column "Group No" (29)".
Error at Extract Stations [Excel Source [1]]: Failed to set property "DataType" on "output column "Group No" (29)".

Saya telah mencoba memodifikasi paket xml. Saya mencoba IMEX=1dan typeguessrow=0tetapi tidak ada yang memperbaiki masalah saya. Apakah ini memiliki perbaikan sama sekali? Ada juga artikel yang menyarankan Anda memodifikasi registri Anda sehingga excel membaca lebih dari 8 baris default sebelum menebak tipe data. Saya tidak ingin menempuh rute ini karena walaupun itu berfungsi, maka saya harus memodifikasi registri pada mesin yang saya rencanakan untuk menjalankan paket.

Bidang excel yang akan diimpor ke bidang SQL nvarchar berbunyi misalnya

295.3
296.33

tetapi mereka sedang ditulis ke tabel SQL sebagai

295.30000000000001
296.32999999999998

Saya memasukkan dataviewers dan bidang menampilkan

295.3
296.33

semua jalan melalui eksekusi yang benar tapi saya kira ketika hits sumber Tujuan OLE DB entah bagaimana mengubahnya menjadi

295.30000000000001
296.32999999999998

mana yang salah

Saya juga memiliki nilai-nilai seperti V321.1 dan V213.34 misalnya yang pasti bukan bilangan bulat dan perlu disimpan sebagai varchar.

Juan Velez
sumber
Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
Paul White 9

Jawaban:

2

Apakah mungkin untuk mendapatkan file tersebut sebagai file .csv yang dapat diimpor seperti file teks dan tidak akan memiliki masalah ini? Saya biasanya menendang kembali semua file Excel dan meminta format lain karena SSIS dan Excel tidak bermain bersama dengan baik di banyak level.

HLGEM
sumber
1
Saya mengubah perubahan ke file .csv atau txt dalam waktu dekat. akan membuat segalanya lebih mudah.
Juan Velez
2

Tampaknya tidak ada cara untuk memperbaiki masalah ini. Excel melihat pada beberapa baris pertama data dalam kolom dan akan selalu PAKSA datatype ke FLOAT apa pun yang terjadi. Saya diberi solusi untuk membuat templat dengan beberapa karakter varchar di beberapa baris pertama (8+) sehingga EXCEL akan mengambilnya sebagai tipe data dan kemudian mengimpor data saya. Satu hal yang membantu adalah karena saya menggunakan Source Safe, saya dapat "Memeriksa" file sehingga membuat file paket saya "Hanya Baca" sehingga Visual Studio tidak dapat mengubah tipe data yang saya tentukan sebelumnya.

Juan Velez
sumber
1

Langkah 1: Tambahkan IMEX=1; MAXROWSTOSCAN=0string koneksi (misalnya Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Source\filename.xlsx;Extended Properties="EXCEL 12.0 XML;HDR=YES;IMEX=1; MAXROWSTOSCAN=0").

Langkah 2: Tutup solusinya. Buka paket SSIS dalam editor teks, cari kolom yang terus membalik kembali ke tipe data yang ditentukan sebelumnya. Perbarui secara manual dalam file XML ke format yang diinginkan.

Langkah 3: Buka paket di Alat Data Server SQL dan jalankan, sekarang Anda harus dapat memuat data karena dari file.

pengguna1968485
sumber
Maaf, tetapi tipe data sumber tidak ada dalam paket. Hanya kolom tujuan yang diketik. Ini mengalahkan tujuan lagi, karena konversi masih terjadi di samping driver Microsoft.Ace (atau driver mana pun yang dipilih), dan kehilangan data sudah terjadi pada saat masuk ke SSIS dan tabel tujuan.
Reversed Engineer