Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server 2012 запитва данни от Access 2007 с помощта на грешка OPENROWSET

И накрая, след няколко неуспешни опита 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 тук.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете централна заявка в sql сървър без агрегатна функция

  2. Как да коригирате „Отказът ALTER TABLE SWITCH не е успешен“

  3. Как да извърша вмъкване и връщане на вмъкната идентичност с Dapper?

  4. Отложена издръжливост в SQL Server 2014

  5. Вмъкване на данни от SQL Server в Salesforce с курсор