透過 Opendatasource 存取 Excel 2007 有問題

例如:

select f1 * into #tmp
from opendatasource(‘Microsoft.ACE.OLEDB.12.0’,’data source=F:publicEPASIPDataChiayiCountyV3.xlsx;Extended Properties="Excel 12.0;HDR=NO;IMEX=1″‘)…[第一頁$] –記得要補上最後的 $ 符號,漏了,不會取出該頁籤的內容

傳回錯誤:

訊息 7399,層級 16,狀態 1,行 3
The OLE DB provider “Microsoft.ACE.OLEDB.12.0″ for linked server “(null)" reported an error. Access denied.
訊息 7301,層級 16,狀態 2,行 3
Cannot obtain the required interface (“IID_IDBCreateCommand") from OLE DB provider “Microsoft.ACE.OLEDB.12.0″ for linked server “(null)".

可能原因是 SQL Server 的帳號不足以啟動 ACE 的 COM+ 元件,參考:http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/a525b569-77ca-41da-96e1-2ba1938dd32d

可透過元件服務賦予權限

image

另外,Excel 2003(Microsoft.OLEDB.Jet.4.0)以前,預設以前 8 筆紀錄判讀欄位的資料類型和長度,這可以改

Registry HKEY_LOCAL_MACHINESOFTWAREMicrosoftJet4.0EnginesExcelTypeGuessRows

設為 0 以讀完全部的紀錄再決定資料類型和長度。

若是 Windows 64 位元,須改:

HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftJet4.0EnginesExcelTypeGuessRows

但 Excel 2008(Microsoft.OLEDB.ACE.12.0) 會自動決定資料類型,卻無法改變資料長度,造成 255 字元(510位元組)後就 truncate 該筆欄位資料,除非該欄的前八筆紀錄內,有長度超過 255 字元的紀錄,否則每有超過長度的紀錄,將逐筆傳回類似如下的錯誤訊息:

OLE DB provider ‘Microsoft.ACE.OLEDB.12.0’ for linked server ‘(null)’ returned truncated data for column ‘[Microsoft.ACE.OLEDB.12.0].F5’. The actual data length is 1082 and truncated data length is 510.

這不曉得要如何補救

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: