如何將 Access 的 Memo 型態欄位匯入到 SQL2005 的 nvarchar 型態欄位

問題描述

使用 SQL 2005 w/ SP2 的匯出匯入精靈將資料從 Access 匯入到 SQL2005 發生了錯誤

但使用在SQL 2000的環境上卻無該問題,可以正確地匯入

中文的錯誤訊息如下:

- 執行前 (錯誤)

訊息

·錯誤 0xc0202009: 資料流程工作: SSIS 錯誤碼 DTS_E_OLEDBERROR。發生 OLE DB 錯誤。錯誤碼: 0x80040E21。
有 OLE DB 記錄可用。來源: "Microsoft SQL Native Client"  Hresult: 0x80040E21  描述: "多重步驟 OLE DB 操作產生錯誤。請檢查每個 OLE DB 狀態值 (如果有的話)。未完成任何工作。"。
(SQL Server 匯入和匯出精靈)

·錯誤 0xc0202025: 資料流程工作: 無法建立 OLE DB 存取子。請確認資料行中繼資料有效。
(SQL Server 匯入和匯出精靈)

錯誤 0xc004701a: 資料流程工作: 元件 "目的地 - Employee" (205) 未通過執行前階段,傳回錯誤碼 0xC0202025。
(SQL Server 匯入和匯出精靈)

英文的錯誤訊息如下:

- Pre-execute (Error)
Messages
Error 0xc0202009: Data Flow Task: SSIS Error Code DTS_E_OLEDBERROR.  An OLE DB error has occurred. Error code: 0x80040E21.
An OLE DB record is available.  Source: "Microsoft SQL Native Client"  Hresult: 0x80040E21  Description: "Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.".
(SQL Server Import and Export Wizard)
Error 0xc0202025: Data Flow Task: Cannot create an OLE DB accessor. Verify that the column metadata is valid.
(SQL Server Import and Export Wizard)
Error 0xc004701a: Data Flow Task: component "Destination - Employee" (205) failed the pre-execute phase and returned error code 0xC0202025.
(SQL Server Import and Export Wizard)

解決方法

關於這個問是由於 Access 的 memo 最大容量為 65,536,其大於 SQL 2005 nvarchar 可以容納的範圍,

資料檢查在 SQL 2005 中較 SQL 2000 更為仔細,故在匯入作業的『執行前』階段即被檢查出資料型態不符,而出現錯誤訊息。

我們可以將在SQL 2005 中對應到 Access 為資料型能為 memo 的欄位,將其資料型態改為 nvarchar(max)

再執行匯入功能即可正常將 Access 資料匯入 SQL 2005。