解決在Sql Server2005查詢分析器中讀取Excel表出現的一些問題

iSQlServer發表於2009-10-12
在sql2005查詢分析器中讀取excel時遇到的幾個問題,收集了網上所有資源,最後問題終於解決了,網上很多答案都是貼上、複製形式的,所以在實際的環境中並不能用,相信有很多朋友和我遇到過一樣的錯誤,為了避免後人犯同樣的錯誤,現總結分享給大家:
環境:
      系統:      windows7,
      資料庫: sqlserver2005,
      office:     office2003

SQL讀取Excel常用的方式有:
A.通過使用 OpenRowSet 和 OpenDataSource 函式
B.通過使用連結伺服器查詢 Excel

select * from OpenRowSet
         ('Microsoft.Jet.OLEDB.4.0',
          'Excel 8.0;HDR=Yes;IMEX=1;Database=E:\bb.xls',
           [Sheet1$]
          )
一般報錯:
訊息 7399,級別 16,狀態 1,第 1 行
連結伺服器 "(null)" 的 OLE DB 訪問介面 "Microsoft.Jet.OLEDB.4.0" 報錯。提供程式未給出有關錯誤的任何資訊。
訊息 7303,級別 16,狀態 1,第 1 行
無法初始化連結伺服器 "(null)" 的 OLE DB 訪問介面 "Microsoft.Jet.OLEDB.4.0" 的資料來源物件。

select * from OpenDataSource
         ('Microsoft.Jet.OLEDB.4.0',
          'Data Source=E:\bb.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1"'
          )...[Sheet1$]  
一般報錯:
訊息 7399,級別 16,狀態 1,第 1 行
連結伺服器 "(null)" 的 OLE DB 訪問介面 "Microsoft.Jet.OLEDB.4.0" 報錯。提供程式未給出有關錯誤的任何資訊。
訊息 7303,級別 16,狀態 1,第 1 行
無法初始化連結伺服器 "(null)" 的 OLE DB 訪問介面 "Microsoft.Jet.OLEDB.4.0" 的資料來源物件。

SELECT * FROM OpenDataSource(
                              'Microsoft.Jet.OLEDB.4.0',
                              'Data Source=E:\bb.xls;User ID=Admin;Password=;Extended properties=Excel 5.0'
                            )...[Sheet1$]
一般報錯:
訊息 7308,級別 16,狀態 1,第 1 行
因為 OLE DB 訪問介面 'Microsoft.Jet.OLEDB.4.0' 配置為在單執行緒單元模式下執行,所以該訪問介面無法用於分散式查詢。

declare @rc int
declare @server nvarchar(128)
declare @srvproduct nvarchar(128)
declare @provider nvarchar(128)
declare @datasrc nvarchar(4000)
declare @location nvarchar(4000)
declare @provstr nvarchar(4000)
declare @catalog nvarchar(128)

set @server = 'exceltosql'
set @srvproduct = 'excel'
set @provider = 'microsoft.jet.oledb.4.0'
set @datasrc = 'e:\bb.xls'
set @provstr = 'excel 8.0'
exec @rc = [master].[dbo].[sp_addlinkedserver] @server, @srvproduct, @provider,
@datasrc, @location, @provstr, @catalog

查詢:
select * from exceltosql...sheet1$

報錯:
連結伺服器"exceltosql"的 OLE DB 訪問介面 "microsoft.jet.oledb.4.0" 返回了訊息 "無法啟動應用程式。工作組資訊檔案丟失,或是已被其它使用者以獨佔方式開啟。"。
訊息 7399,級別 16,狀態 1,第 1 行
連結伺服器 "exceltosql" 的 OLE DB 訪問介面 "microsoft.jet.oledb.4.0" 報錯。身份驗證失敗。
訊息 7303,級別 16,狀態 1,第 1 行
無法初始化連結伺服器 "exceltosql" 的 OLE DB 訪問介面 "microsoft.jet.oledb.4.0" 的資料來源物件。

下面總結解決方式:
1、在SQL Server 外圍應用配置器中啟用 OpenRowSet 和 OpenDataSource函式
2、執行以上sql語句的資料庫必須是本地資料庫,如果為遠端的資料庫就會報上面的錯誤
3、連結字串 Extended Properties屬性的內容要以分號間隔並用雙引號括起來,sheet1$ 在括號外
原部落格地址:http://wep2008.blogbus.com/logs/35390970.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-616353/,如需轉載,請註明出處,否則將追究法律責任。

相關文章