2015年3月23日 星期一

[SSIS][MySQL Data Provider]Error: The value was too large to fit in the ADO NET Source.

        因為得從MySQL匯入資料到SQL Server上,參考Connecting to MySQL from SSIS此篇,設好ADO NET Source後,測試一下出現如下錯誤


        問題出在ADO NET Source上,照錯誤訊息指出id欄位的值太大超過設定,我想說奇怪id欄位的Data type是自動偵測的怎麼會出錯呢?

        開啟進階編輯看一下Data type是DT_UI4,four-byte unsigned integer

        沒用過MySQL的可能對unsigned沒什感受,我們看一下MySQL整數格式吧,Unsigned去除負值後,可以使得最大值超過原本的上限,最大值可多一倍左右

        那Integration Services Data Types的DT_UI4對應SQL Server的data type是哪種呢?看下圖沒有相對應的,看起來它還是寫four-byte,所以應該還是int了,若對應MySQL應該是Signed INT囉,萬一MySQL端是Unsigned的INT就有可能出錯囉


        接著檢查MySQL的id欄位,還真的是unsigned的,ID中最大值為4000000078,果然超過Signed INT上限


        知道問題出在哪了,我想直接進進階編輯器調整id欄位的data type,但不讓我調整,會出現如下錯誤訊息,看起來只有字串欄位允許調整


        退而求其次,我直接在SQL command中轉換data type總行吧,轉成bigint應該OK,用下面MySQL CAST函數就可以轉換成64-bit的bigint囉,跟SQL Server的CAST用起來有些不同
CAST(id AS UNSIGNED)
        開啟進階編輯器看一下,id欄位自動辨識為eight-byte的DT_UI8囉,eight-byte就是bigint了


        再次執行就OK囉

0 意見:

張貼留言