首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> SQL Server 2005

SQL Server 2005 DTS/SSIS 匯入平面檔案截斷錯誤解決方案

     編輯:SQL Server 2005

使用 SQL Server 2005 匯入/匯出精靈 (DTS/SSIS) 匯入文字檔 (CSV/TXT) 時,常遇到「資料截斷」或「文字被截斷」錯誤 (錯誤碼 0xC02020A1, 0xC020902A)。主因是平面檔案連線管理員預設欄位寬度為 50 字元,實際資料超過此長度即報錯。

典型錯誤訊息

錯誤 0xc02020a1: 資料流程任務: 資料轉換失敗。資料行 "Column 2" 文字被截斷...
錯誤 0xc020902a: 輸出資料行 "Column 2" 因截斷失敗...
錯誤 0xc0047038: SSIS 錯誤碼 DTS_E_PRIMEOUTPUTFAILED...

根因分析

平面檔案來源的「進階」頁面中,每個欄位的 OutputColumnWidth 預設為 50。若來源檔案某欄位實際長度超過 50 (如長網址、JSON 片段、備註欄位),資料流程引擎會依據截斷處理原則 (預設為失敗) 中止封裝執行。

解決方案:手動調整欄位寬度

  1. 在「選擇來源資料表和檢視表」或「設定平面檔案連線管理員」對話框,點選 「進階」 索引標籤。
  2. 選取左側欄位清單,右側屬性網格中修改 OutputColumnWidth 為足夠大的值 (如 4000、8000 或 MAX 對應的大數值)。
  3. 或點選「建議類型」按鈕,讓 SSIS 掃描樣本資料自動推薦長度 (需資料量較大時較準確)。
  4. 完成後重新執行封裝。

進階技巧:動態處理不固定寬度

  • 指令碼元件:在資料流程中加入 Script Component,以 C# 程式碼動態讀取每行、依分隔符切割、輸出不定寬度欄位。
  • 衍生資料行 + 字串函數:若僅需截取前 N 字元,可用 SUBSTRING / LEFT 在衍生資料行中預先截斷。
  • 錯誤輸出導向:將平面檔案來源的錯誤輸出導向另一個目的地 (如錯誤記錄表),設定 ErrorRowDisposition = RedirectRow,不中斷主流程。

預防建議

  • 匯入前先用文字編輯器或 PowerShell 檢查來源檔案最大欄位長度:Get-Content file.csv | ForEach-Object { $_.Split(',')[1].Length } | Measure-Object -Maximum。
  • 建立可重複使用的「平面檔案連線管理員」範本,預設寬度設大 (如 4000)。
  • 大量匯入優先考慮 BULK INSERT / BCP / OPENROWSET(BULK...),效能優於 SSIS 封裝。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved