Sqlserver linked server指向Excel報錯編號為7399和7303的解決方法

lusklusklusk發表於2021-10-13

linked server的建立語句如下
EXEC master.dbo.sp_addlinkedserver @server = N'XL_INDEXPERFORMANCELIST', @srvproduct=N'Jet 4.0', @provider=N'Microsoft.ACE.OLEDB.12.0', @datasrc=N'\\frdbprod1\MKTINDX\IndexPerformanceList_DBPROD3.xls', @provstr=N'Excel 5.0'

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'XL_INDEXPERFORMANCELIST',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL

訪問linked server有如下錯誤
Msg 7399, Level 16, State 1, Line 1 The OLE DB provider Microsoft.ACE.OLEDB.15.0 for linked server (null) reported an error. The provider did not give any information about the error.
Msg 7303, Level 16, State 1, Line 1 Cannot initialize the data source object of OLE DB provider Microsoft.ACE.OLEDB.15.0 for linked server (null).



解決思路
1、確保excel沒有被其他開啟
2、確保訪問linked server的使用者擁有訪問excel檔案的許可權,即檢視使用者是否有讀取共享目錄\\frdbprod1\MKTINDX\下所有檔案的許可權
3、確保@datasrc值中的共享目錄是使用的UNC模式,即必須使用伺服器名稱而不能使用別名
To specify a shared data file, use its universal naming convention (UNC) name, which takes the general form, **\\Servername\Sharename\Path\**Filename.
備註:啥是別名,就是伺服器對應一個ip,然後在DNS伺服器中對這個ip也設定了其他的名稱,使用其他名稱也可以訪問這臺伺服器


解決方法
按上面的思路1、2檢查,發現都沒有問題,最後發現frdbprod1不是伺服器名稱,伺服器名稱是netappdai1,修改@datasrc=N'\\netappdai1\MKTINDX\IndexPerformanceList_DBPROD3.xls',之後可以正常訪問這個linked server了

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

相關文章