Я пытаюсь запустить ниже заявление:Использование SQL Credential открыть файл с 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-битной машине. Выполняемый код в конечном итоге будет с кодом C# на веб-сервере IIS6. Однако в настоящее время я просто пытаюсь запустить его на SQL Server. Я зарегистрировался на SQL Server с использованием SQL Auth, но к файлу должен быть доступен Windows Auth, специфичный для диска общего доступа (учетная запись AD в нашей сети). Ad-Hoc priveleges были предоставлены учетной записи SQL Auth, чтобы разрешить 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
с идентификатором пользователя и проходом учетной записи Active Directory Windows auth с доступом к этому файлу общего доступа, но ошибка осталась.
Я рассматривал использование прокси-сервера, но это не работа агента сервера sql. Это специальный вызов.
Я также вошел в SQL Server с использованием Windows Auth с пользователем, имеющим права на общий ресурс, и получаю ту же ошибку.
Я исследовал это много, но не могу найти ответ, который работает. Посредством моих поисков кажется, что это проблема многих людей. Любая помощь будет оценена. Я в тупике.
Просьба представить информацию об операционной системе сервера. Это 32 или 64-битная архитектура? Установили ли вы надлежащие драйверы OleDb?Где вы пытаетесь выполнить вышеуказанный запрос: на стороне сервера на локальном компьютере? –
@MaciejLos Это 32-битная архитектура. OleDb отлично работает без использования диска общего доступа, как указано, поэтому я знаю, что эти драйверы работают нормально. Также отмеченный выше, я в конечном итоге выполним из кода C#, запущенного как CodeBehind на веб-сервере. На данный момент, однако, я просто хочу, чтобы это работало, когда я запускаю общий SQL-запрос adhoc, зарегистрированный с использованием SQL Server Auth. Я запускаю студию управления для запуска запроса. – steventnorris
[MSDN wrote:] (http://technet.microsoft.com/en-us/library/ms175915.aspx) Для использования BULK INSERT или INSERT ... SELECT * FROM OPENROWSET (BULK ...) для массового импорта данных с другого компьютера файл данных должен быть разделен между двумя компьютерами. Чтобы указать общий файл данных, используйте его имя универсального названия (UNC), которое принимает общую форму, \\ имя_сервера \ имя_архива \ путь \ имя_файла. Кроме того, ** учетная запись, используемая для доступа к файлу данных, должна иметь разрешения, необходимые для чтения файла на удаленном диске **. –