И накрая, след няколко неуспешни опита SQL Server да „говори“ с база данни на Access – или като „свързан сървър“ в SSMS, или чрез OPENROWSET()
в T-SQL – намерих тази публикация в блога, която предлага следните три (3) предложения.
Настройка №1:Настройки на доставчика на OLE DB
Доставчикът на OLE DB за ACE (или Jet) трябва да има активирани опциите „Динамичен параметър“ и „Разрешаване на процес“. В SSMS отворете
Сървърни обекти> Свързани сървъри> Доставчици
клон, щракнете с десния бутон върху „Microsoft.ACE.OLEDB.12.0“ (или „Microsoft.Jet.OLEDB.4.0“), изберете „Свойства“ и се уверете, че тези опции са избрани:
Настройка №2:Разрешения за временна папка
Това е този, който ме порази.
Очевидно SQL Server трябва да запише информация във временен файл, докато изпълнява OLE DB заявка към база данни на Access. Тъй като SQL Server работи като услуга, той използва папката %TEMP% на акаунта, под който се изпълнява услугата.
Ако услугата SQL Server се изпълнява под вградения акаунт "Мрежова услуга", тогава временната папка е
%SystemRoot%\ServiceProfiles\NetworkService\AppData\Local\Temp
и ако се изпълнява под вградения акаунт в "Local Service", тогава временната папка е
%SystemRoot%\ServiceProfiles\LocalService\AppData\Local\Temp
Проблемът ми беше, че SSMS работеше под my акаунт (не МРЕЖОВА УСЛУГА), така че имах достъп само за четене до папката Temp
След като си дадох права за промяна на тази папка
и активира заявки OPENROWSET, както е документирано в друг въпрос тук, а именно ...
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO
... моята заявка работи добре:
Настройка №3:memory_to_reserve
Въпреки че не се наложи да го използвам в моя случай, гореспоменатият блог също твърди, че коригирането на параметъра за стартиране "-g memory_to_reserve" за услугата SQL Server също може да помогне за избягване на подобни грешки. За да направите това:
- стартирайте SQL Server Configuration Manager
- щракнете с десния бутон върху услугата SQL Server (раздел „SQL Server Services“) и изберете „Properties“
- в раздела „Разширени“ добавете
-g512;
към настройката „Параметри за стартиране“ - рестартирайте услугата SQL Server
За повече подробности относно настройката „memory_to_reserve“ вижте статията в MSDN тук.