我試圖運行下面的語句:使用SQL憑據打開一個文件OPENROWSET
INSERT INTO table SELECT * FROM
OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;
Database=//server/folder/file.xls;
HDR=YES;',
'SELECT * FROM [Sheet1$]')
不過,我收到了以下錯誤:
OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "The Microsoft Access database engine cannot open or write to the file '\\server\folder\file.xls'. It is already opened exclusively by another user, or you need permission to view and write its data.".
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)".
我運行SQL Server 2005在一臺32位機器上。正在執行的代碼最終將來自IIS6 Web服務器上的c#代碼。但是,目前我只是試圖讓它在SQL Server上運行。我使用SQL身份驗證登錄到SQL Server,但必須使用特定於共享驅動器(我們網絡上的AD帳戶)的Windows Auth來訪問該文件。 Ad-Hoc特權已授予SQL驗證帳戶,以允許OPENROWSET
。
我已經嘗試添加UID=user;PASS=pswd
成如下面的OPENROWSET
代碼:
INSERT INTO table SELECT * FROM
OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;
Database=//server/folder/file.xls;
HDR=YES;
UID=user;
PASS=pswd',
'SELECT * FROM [Sheet1$]')
這產生相同的錯誤。我還使用用戶標識設置了SQL CREDENTIAL
,並通過了可以訪問該共享驅動器的windows auth Active Directory帳戶,但錯誤依然存在。
我考慮過使用代理,但這不是一個sql server代理作業。這是一個特別的電話。
我也使用Windows身份驗證與具有共享權限的用戶登錄到SQL Server,並獲得相同的錯誤。
我已經研究了很多,但似乎無法找到有效的答案。通過我的搜索,這似乎是許多人遇到的問題。任何幫助將不勝感激。我很難過。
請提供有關服務器操作系統的信息。它是32位還是64位體系結構?你有沒有安裝適當的OleDb驅動程序?你在哪裏試圖執行上面的查詢:在本地計算機上的服務器端? –
@MaciejLos這是一個32位體系結構。如上所述,OleDb可以正常工作而不使用共享驅動器,所以我知道這些驅動程序工作正常。同樣在上面提到的,我最終將從在Web服務器上作爲CodeBehind運行的C#代碼執行。然而,現在,我只需要在運行使用SQL Server身份驗證登錄的常規SQL adhoc查詢時工作。我正在運行管理工作室來運行查詢。 – steventnorris
[MSDN寫道:](http://technet.microsoft.com/en-us/library/ms175915.aspx)使用BULK INSERT或INSERT ... SELECT * FROM OPENROWSET(BULK ...)批量導入數據來自另一臺計算機的數據文件必須在兩臺計算機之間共享。要指定共享數據文件,請使用通用命名約定(UNC)名稱,該名稱採用通用格式\\ Servername \ Sharename \ Path \ Filename。此外,**用於訪問數據文件的帳戶必須具有讀取遠程磁盤**上的文件所需的權限。 –