由於可能失去數據,無法轉換該值
首先讓我澄清一下,這不是一個重複的問題,也不是一個潛在的重複問題。我已經嘗試對 StackOverflow 和 DBA Stack Exchange 上已經存在的這個問題的每一個變體實施每一個答案,但沒有任何運氣。
在過去的兩天裡,我一直在努力解決這個問題(每天工作大約 7 個小時),即使在Google搜尋這個問題之後,似乎沒有其他人遇到與我的問題完全相同的變體。
我想做什麼?
在 SSIS 中,我試圖從 CSV 文件中讀取數據,並將其中的行插入到 OLE DB 數據庫中。為此,我做了最簡單的設置,如下所示。
Flat File Source
- 讀取 CSV 行。Derived Column
- 目前什麼都不做(它只是為了試驗)。Data Conversion
- 目前什麼都不做(它只是為了試驗)。OLE DB Destination
- 將行儲存在數據庫中。當我嘗試執行它時,它會在我的OLE DB 目標處停止執行,並顯示以下錯誤消息。
輸入“OLE DB 目標輸入”(51) 上的輸入列“金額”(187) 存在錯誤。返回的列狀態為:“由於可能失去數據,無法轉換該值。”。
失敗的列 (
Amount
) 目前是 類型DT_STR
。它似乎是我現在最信任的類型。我嘗試了什麼?
我嘗試在
Flat File Connection
失敗的列上使用“建議類型”功能。這使它推薦了Single byte signed int
數據類型。
- 停在我的平面文件源。
- 錯誤是數據轉換失敗。“金額”列的數據轉換返回狀態值 2 和狀態文本“由於可能失去數據,無法轉換該值。”。
我嘗試使用 將
Derived Column
列轉換為DT_I4
.
- 停在我的Derived Column。
- 錯誤是數據轉換失敗。“金額”列的數據轉換返回狀態值 2 和狀態文本“由於可能失去數據,無法轉換該值。”。
我嘗試使用 將
Data Conversion
列的值轉換為DT_I4
.
- 停在我的
Data Conversion
.- 錯誤是數據轉換失敗。“金額”列的數據轉換返回狀態值 2 和狀態文本“由於可能失去數據,無法轉換該值。”。
我嘗試更改
DT_STR
源和目標中值的長度。
- 根據設置在源或目的地停止。
我嘗試使用 Excel 源連接器進行連接,而不是添加和不
IMEX=1
添加到連接字元串。沒有運氣。我的程式意識告訴我,我搞砸了。對於這麼簡單的事情,我從來沒有遇到過這麼大的問題。
為什麼我不能忽略數據的“潛在”失去?至少可以說真的很令人沮喪。
我的系統
這是一台安裝了 SQL Server 2008 的 Windows Server 2008 R2 機器。機器本身已通過 Windows Update 進行全面更新。
我遇到過幾次,問題是導出/導入參數中的數據類型不匹配。首先要做的是通過右鍵點擊源或目標來檢查這些參數,選擇高級編輯器。轉到輸入和輸出屬性並檢查所有項目的該列的數據類型 - 外部、輸出和輸入。我通常在這裡看到一個差異,通常一個是 Unicode (WSTR),另一個是 I4 或 DSTR。
忽略錯誤
首先,您應該能夠通過轉到平面文件源、錯誤輸出然後將“截斷”下的“失敗組件”更改為“忽略錯誤”來忽略字元串截斷。
更好的解決方案
真正的問題可能是 SSIS 管道中的字元串長度仍然是錯誤的,因為它是在較早的時候初始化的。
您可以通過點兩下平面文件源中的綠色箭頭(或在派生列/數據轉換之後)並選擇“元數據”來確定是否是這種情況。在那裡您可以看到管道內欄位的長度。
如果經常看到元數據不再匹配源組件,主要是通過嚮導創建平面文件源及其相應的連接。
我的建議是刪除連接和平面文件源並重新創建它們,因為我還沒有找到將管道元數據與源組件重新同步的方法。