sql讀取Excel方法


Sql Server 讀取excel方法:

select * from OPENROWSET
('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=存放Excel\Excel名.xls',[Sheet名$])

Example:

select * from OPENROWSET
('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;IMEX=1;Database=f:\SuccessBak\Student.xls',
[Class$])

--注意:
--1.excel處於關閉狀態,即不能處於被打開狀態
--2.excel文件所處路徑及文件名、工作簿的名稱盡量不要出現漢字,盡量以英文命名
--3.注意[Class$]',工作簿名后的$是必須的.
--4.Excle必須與Sql Server在同一電腦上。

在使用這個sql語句的過程中,我們可能會碰到下面的錯誤

SQL Server blocked access to STATEMENT 'OpenRowset/OpenDatasource' of component 'Ad Hoc Distributed Queries' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Ad Hoc Distributed Queries' by using sp_configure. For more information about enabling 'Ad Hoc Distributed Queries', see "Surface Area Configuration" in SQL Server Books Online

 sqlserver 阻止了使用'OpenRowset/OpenDatasource'的組件,所以解決辦法如下:

我們使用sql語句來開啟這個功能

EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO

如果遇到以下問題,請檢查文章開始處提到的注意:

服務器: 消息 7399,級別 16,狀態 1,行 1
OLE DB 提供程序 'Microsoft.Jet.OLEDB.4.0' 報錯。提供程序未給出有關錯誤的任何信息。
OLE DB 錯誤跟蹤[OLE/DB Provider 'Microsoft.Jet.OLEDB.4.0' IDBInitialize::Initialize returned 0x80004005:  提供程序未給出有關錯誤的任何信息。]。

 

補充:

讀取Excel時,可能會遇到以下問題:

  當列中存在數字行和字符串行時,會遇到有一種讀出為null的情況,該如何處理呢?

1、在數字行的數據前加';

2、在連接字符串中加入:IMEX=1;

但是第二種方法有時還不行.當前八行數據均為數字或字符串時,后面再有其他類型數據時,仍然讀不出來 。

解釋如下:
IMEX是用來告訴驅動程序使用Excel文件的模式,其值有0、1、2三種,分別代表導出、導入、混合模式。當我們設置IMEX=1時將強制混合數據轉換為文本,
但僅僅這種設置並不可靠,IMEX=1只確保在某列前8行數據至少有一個是文本項的時候才起作用,它只是把查找前8行數據中數據類型占優選擇的行為作了
略微的改變。例如某列前8行數據全為純數字,那么它仍然以數字類型作為該列的數據類型,隨后行里的含有文本的數據仍然變空。 
另一個改進的措施是IMEX=1與注冊表值TypeGuessRows配合使用,TypeGuessRows 值決定了ISAM 驅動程序從前幾條數據采樣確定數據類型,
默認為“8”。可以通過修改“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel”下的該注冊表值來更改采樣行數。
但是這種改進還是沒有根本上解決問題,即使我們把IMEX設為“1”, TypeGuessRows設得再大,例如1000,假設數據表有1001行,
某列前1000行全為純數字,該列的第1001行又是一個文本,ISAM驅動的這種機制還是讓這列的數據變成空。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM