使用「匯入/匯出精靈」將 Excel 匯入 SQL Server 時,長文字欄位被截斷 (預設 255 字元),或出現錯誤:
錯誤 0xc02020c5:資料轉換失敗,文字被截斷...
VARCHAR(50)) 小於實際資料長度。路徑:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel
值:TypeGuessRows = 0 (DWORD) -- 0 表示掃描所有列
重啟 SSMS/精靈生效。
-- 1. 啟用 Ad Hoc Distributed Queries
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE;
-- 2. 匯入並自動建立目標表 (欄位長度依實際資料)
SELECT * INTO [TargetDB].[dbo].[TargetTable]
FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
'Data Source=D:\Data\Source.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES"')...[Sheet1$];
-- 3. 完成後關閉 Ad Hoc (安全考量)
EXEC sp_configure 'Ad Hoc Distributed Queries', 0; RECONFIGURE;
EXEC sp_configure 'show advanced options', 0; RECONFIGURE;
注意: Excel 檔需放在 SQL Server 伺服器本機磁碟,或透過 UNC 路徑且服務帳號有讀取權限。
OutputColumnWidth 設大 (如 4000),DataType 改為 DT_WSTR 或 DT_NTEXT。NVARCHAR(MAX))。匯入後執行 SELECT MAX(LEN(LongTextCol)) FROM TargetTable 確認無截斷。
