2016-09-16 58 views
0

我使用這個代碼導入Excel文件到SQL表Excel以SQL表的錯誤消息7350

USE master 
GO 
sp_configure 'show advanced options', 1; 

RECONFIGURE; 
GO 

    sp_configure 'Ad Hoc Distributed Queries', 1; 

    RECONFIGURE; 
    GO 

insert into memberform (id) 
    SELECT * FROM OPENROWSET ('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=C:\\test.xls;HDR=YES', 'select * from [Sheet1$]') 

但我發現了錯誤:

Msg 7350, Level 16, State 2, Line 1 Cannot get the column information from OLE DB provider "Microsoft.Jet.OLEDB.4.0" >for linked server "(null)".

有什麼我應首先在sql中進行參數化?

+0

Docs:「OPENROWSET不接受變量的參數。」您需要按照消息中的步驟操作。 – Serg

+0

請不要在'OPENROWSET'命令中使用任何空格! –

回答

1

我找到了解決方案,我剛剛安裝了AccessDatabaseEngine_X64位。原因我的SQL是64位和我的辦公室32位這就是爲什麼它沒有奏效。問題是,你不能安裝Office 2007 32位Access數據庫引擎x64。您將需要此說明:https://knowledge.autodesk.com/support/autocad-civil-3d/troubleshooting/caas/sfdcarticles/sfdcarticles/How-to-install-64-bit-Microsoft-Database-Drivers-alongside-32-bit-Microsoft-Office.html

另外在我的代碼中,我應該使用ace的insted的jet.Also,因爲我使用的是Excel 2007,我需要將其更改爲excel 12.0。如下面的示例

SELECT * FROM OPENROWSET ('Microsoft.Ace.OLEDB.12.0', 'Excel 12.0;Database=C:\\test.xlsx;HDR=YES', 'select * from [Sheet1$]') 
2

基本上,Ad hoc Distributed Queries默認情況下,在SQL Server中,由於安全配置禁用,您不能使用任何OPENROWSETOPENDATASOURCE,如果你不能執行這些行集函數,那麼你就不能訪問任何遠程數據源。

運行下面的查詢來啓用這些選項,讓您對這些工作,而無需任何進一步的問題:

USE master 
GO 
sp_configure 'show advanced options', 1; 

RECONFIGURE; 
GO 

sp_configure 'Ad Hoc Distributed Queries', 1; 

RECONFIGURE; 
GO 

從輸出中,你可以看到「特設分佈式查詢」設置從0變爲1.現在您可以輕鬆執行任何操作Ad hoc Query

注意:默認情況下,此選項設置爲0,您需要將其更改爲1以激活此功能。

希望這會有所幫助!

+0

謝謝你的工作,但現在我得到兩個錯誤:消息7399,級別16,狀態1,行1 鏈接服務器「(null)」的OLE DB提供程序「Microsoft.Jet.OLEDB.4.0」報告了一個錯誤。提供者沒有提供任何關於錯誤的信息。 消息7303,級別16,狀態1,行1 無法初始化鏈接服務器「(null)」的OLE DB提供程序「Microsoft.Jet.OLEDB.4.0」的數據源對象。 – DiH

+0

通常由於文件名不正確或文件不可用而導致遇到此類錯誤。你介意重新啓動你的SQL Server實例,然後檢查它是否工作? –

+0

錯誤MSG:消息7350,級別16,狀態2,行1無法從鏈接服務器「(null)」的OLE DB提供程序「Microsoft.Jet.OLEDB.4.0」>獲取列信息。 – DiH