Endlich, nach mehreren erfolglosen Versuchen, SQL Server mit einer Access-Datenbank „sprechen“ zu lassen – entweder als „Linked Server“ in SSMS oder über OPENROWSET()
in T-SQL – Ich habe diesen Blogbeitrag gefunden, der die folgenden drei (3) Vorschläge enthält.
Optimierung Nr. 1:OLE DB-Provider-Einstellungen
Beim OLE DB-Anbieter für ACE (oder Jet) müssen die Optionen „Dynamischer Parameter“ und „In Bearbeitung zulassen“ aktiviert sein. Öffnen Sie in SSMS die
Serverobjekte> Verbindungsserver>Anbieter
Zweig, klicken Sie mit der rechten Maustaste auf „Microsoft.ACE.OLEDB.12.0“ (oder „Microsoft.Jet.OLEDB.4.0“), wählen Sie „Eigenschaften“ und stellen Sie sicher, dass diese Optionen ausgewählt sind:
Anpassung Nr. 2:Berechtigungen für Temp-Ordner
Das ist derjenige, der mich verblüfft hat.
Anscheinend muss SQL Server Informationen in eine temporäre Datei schreiben, während eine OLE DB-Abfrage für eine Access-Datenbank ausgeführt wird. Da SQL Server als Dienst ausgeführt wird, verwendet es den %TEMP%-Ordner des Kontos, unter dem der Dienst ausgeführt wird.
Wenn der SQL Server-Dienst unter dem integrierten „Netzwerkdienst“-Konto ausgeführt wird, lautet der temporäre Ordner
%SystemRoot%\ServiceProfiles\NetworkService\AppData\Local\Temp
und wenn es unter dem integrierten "Lokaler Dienst"-Konto läuft, dann ist der Temp-Ordner
%SystemRoot%\ServiceProfiles\LocalService\AppData\Local\Temp
Mein Problem war, dass SSMS unter my lief Konto (nicht NETZWERKDIENST), sodass ich nur Lesezugriff auf den Temp-Ordner hatte
Sobald ich mir selbst die Berechtigung zum Ändern für diesen Ordner erteilt habe
und aktivierte OPENROWSET-Abfragen, wie in einer anderen Frage hier dokumentiert, nämlich ...
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO
... meine Abfrage hat gut funktioniert:
Tweak #3:memory_to_reserve
Obwohl ich es in meinem Fall nicht verwenden musste, behauptet der oben genannte Blog auch, dass das Anpassen des Startparameters „-g memory_to_reserve“ für den SQL Server-Dienst auch dazu beitragen kann, ähnliche Fehler zu vermeiden. Dazu:
- SQL Server Configuration Manager starten
- Klicken Sie mit der rechten Maustaste auf den SQL Server-Dienst (Registerkarte "SQL Server-Dienste") und wählen Sie "Eigenschaften"
- Stellen Sie auf der Registerkarte "Erweitert"
-g512;
voran zur Einstellung "Startparameter" - Starten Sie den SQL Server-Dienst neu
Weitere Einzelheiten zur Einstellung "memory_to_reserve" finden Sie hier im MSDN-Artikel.