Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server 2012 wysyła zapytania dotyczące danych programu Access 2007 przy użyciu błędu OPENROWSET

Wreszcie, po kilku nieudanych próbach, aby SQL Server „porozmawiał” z bazą danych programu Access — jako „serwer połączony” w SSMS lub za pomocą OPENROWSET() w T-SQL – znalazłem ten wpis na blogu, który zawierał następujące trzy (3) sugestie.

Poprawka nr 1:Ustawienia dostawcy OLE DB

Dostawca OLE DB dla ACE (lub Jet) musi mieć włączone opcje „Parametr dynamiczny” i „Zezwalaj na przetwarzanie”. W programie SSMS otwórz

Obiekty serwerowe> Serwery połączone>Dostawcy

kliknij prawym przyciskiem myszy "Microsoft.ACE.OLEDB.12.0" (lub "Microsoft.Jet.OLEDB.4.0"), wybierz "Właściwości" i upewnij się, że te opcje są zaznaczone:

Poprawka nr 2:uprawnienia do folderu tymczasowego

To jest ten, który mnie zbijał z tropu.

Najwyraźniej SQL Server musi zapisywać informacje w pliku tymczasowym podczas wykonywania zapytania OLE DB w bazie danych programu Access. Ponieważ SQL Server działa jako usługa, używa folderu %TEMP% konta, na którym działa usługa.

Jeśli usługa SQL Server działa na wbudowanym koncie „Usługa sieciowa”, folder tymczasowy to

%SystemRoot%\ServiceProfiles\NetworkService\AppData\Local\Temp

a jeśli działa na wbudowanym koncie „Usługa lokalna”, to folder tymczasowy to

%SystemRoot%\ServiceProfiles\LocalService\AppData\Local\Temp

Mój problem polegał na tym, że SSMS działał pod moim konto (nie NETWORK SERVICE), więc miałem dostęp tylko do odczytu do folderu Temp

Po przyznaniu sobie uprawnień do modyfikacji w tym folderze

i włączono zapytania OPENROWSET zgodnie z dokumentacją w innym pytaniu tutaj, a mianowicie ...

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO

... moje zapytanie zadziałało poprawnie:

Poprawka nr 3:memory_to_reserve

Chociaż nie musiałem go używać w moim przypadku, wspomniany blog twierdzi również, że dostosowanie parametru startowego "-g memory_to_reserve" dla usługi SQL Server może również pomóc w uniknięciu podobnych błędów. Aby to zrobić:

  • uruchom Menedżera konfiguracji serwera SQL
  • kliknij prawym przyciskiem myszy usługę SQL Server (zakładka „SQL Server Services”) i wybierz „Właściwości”
  • na karcie „Zaawansowane” dodaj przedrostek -g512; do ustawienia „Parametry uruchamiania”
  • zrestartuj usługę SQL Server

Więcej informacji na temat ustawienia „memory_to_reserve” można znaleźć w artykule MSDN tutaj.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmień format daty dla bieżącej sesji w SQL Server

  2. Jakie są rodzaje ograniczeń dostępnych w SQL Server — SQL Server / samouczek T-SQL, część 50

  3. Nie można połączyć się z serwerem SQL za pomocą PHP

  4. Czy są jakieś darmowe narzędzia do generowania skryptów 'INSERT INTO' w MS SQL Server?

  5. Dapper.NET i przechowywany proc z wieloma zestawami wyników