2012-03-13 64 views
1

我想要執行簡單的語句:OPENROWSET與Excel文件

SELECT * FROM 
OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Text;Database=C:\Temp\;','SELECT * FROM [test.csv]') 

突然今天早上,我得到這個消息:

Msg 7308, Level 16, State 1, Line 1 
OLE DB provider 'MICROSOFT.JET.OLEDB.4.0' cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode. 

這是工作到今天上午!

這裏是我的服務器規格: 的Windows 2008 R2 64位 的SQL Server 2008 64位

我已經安裝了AccessDatabaseEngine_x64.exe。

Sql Server正在LocalService帳戶下運行。 我已經設置每個人擁有「C:\ Temp」以及「C:\ Windows \ ServiceProfiles \ LocalService \ AppData \ Local」的FullControl權限。

有什麼我錯過了嗎?我真的很迷茫......

編輯: 我也執行以下語句:

sp_configure ‘show advanced options’, 1; 
GO 
RECONFIGURE; 
GO 
sp_configure ‘Ad Hoc Distributed Queries’, 1; 
GO 
RECONFIGURE; 
GO 

EXEC master.dbo.sp_MSset_oledb_prop N’Microsoft.ACE.OLEDB.12.0′, N’AllowInProcess’, 1 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N’Microsoft.ACE.OLEDB.12.0′, N’DynamicParameters’, 1 
GO 

我也用管理員帳戶測試ACE.OLEDB.12.0

SELECT * FROM 
OPENROWSET('MICROSOFT.ACE.OLEDB.12.0','Text;Database=C:\Temp\;','SELECT * FROM [test.csv]') 

還有另一種錯誤:

OLE DB provider "MICROSOFT.ACE.OLEDB.12.0" for linked server "(null)" returned message "Unspecified error". 
Msg 7303, Level 16, State 1, Line 1 
Cannot initialize the data source object of OLE DB provider "MICROSOFT.ACE.OLEDB.12.0" for linked server "(null)". 

最後我發現它: 我運行ProcMon,我看到Sql Server想訪問F:\ Windows Temp \並且該文件夾不存在!我創建了該文件夾並解決了問題。但是,我從來沒有這樣的文件夾!

+0

您是使用'ACE.OLEDB.12.0'還是'JET.OLEDB.4.0'?在x64版本的服務器上,您需要使用'ACE.OLEDB.12.0'。 – wqw 2012-03-13 16:44:02

+0

我使用的是ACE.OLEDB.12.0,它工作了一年之前。是否有任何Windows更新導致此問題?我只是嘗試JET.OLEDB.4.0來測試寫在一些博客。 – 2012-03-14 05:45:13

+0

您是否在用戶帳戶安全上下文中啓動SQL Server服務? – wqw 2012-03-14 12:07:58

回答

3

最後我發現它:我跑了ProcMon,我看到SQL Server想訪問F:\Windows Temp\並且該文件夾不存在!我創建了該文件夾並解決了問題。但是,我從來沒有這樣的文件夾!