Eindelijk, na verschillende mislukte pogingen om SQL Server te laten "praten met" een Access-database - hetzij als een "Linked Server" in SSMS of via OPENROWSET()
in T-SQL – ik vond deze blogpost met de volgende drie (3) suggesties.
Tweak #1:OLE DB Provider-instellingen
De OLE DB-provider voor ACE (of Jet) moet de opties "Dynamic parameter" en "Allow inprocess" hebben ingeschakeld. Open in SSMS de
Serverobjecten> Gekoppelde servers> Providers
branch, klik met de rechtermuisknop op "Microsoft.ACE.OLEDB.12.0" (of "Microsoft.Jet.OLEDB.4.0"), kies "Eigenschappen" en zorg ervoor dat deze opties zijn geselecteerd:
Tweak #2:Tijdelijke mapmachtigingen
Dit is degene die me dwars zat.
Blijkbaar moet SQL Server informatie in een tijdelijk bestand schrijven terwijl een OLE DB-query wordt uitgevoerd op een Access-database. Omdat SQL Server als een service wordt uitgevoerd, gebruikt het de map %TEMP% van het account waaronder de service wordt uitgevoerd.
Als de SQL Server-service wordt uitgevoerd onder het ingebouwde "Network Service"-account, is de tijdelijke map
%SystemRoot%\ServiceProfiles\NetworkService\AppData\Local\Temp
en als het draait onder het ingebouwde "Local Service"-account, dan is de tijdelijke map
%SystemRoot%\ServiceProfiles\LocalService\AppData\Local\Temp
Mijn probleem was dat SSMS draaide onder mijn account (niet NETWERKSERVICE) dus ik had alleen leestoegang tot de map Temp
Zodra ik mezelf toestemming heb gegeven om die map te wijzigen
en schakelde OPENROWSET-query's in zoals beschreven in een andere vraag hier, namelijk ...
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO
... mijn vraag werkte prima:
Tweak #3:memory_to_reserve
Hoewel ik het in mijn geval niet hoefde te gebruiken, beweert de bovengenoemde blog ook dat het aanpassen van de opstartparameter "-g memory_to_reserve" voor de SQL Server-service ook kan helpen soortgelijke fouten te voorkomen. Om dat te doen:
- start SQL Server Configuration Manager
- klik met de rechtermuisknop op de SQL Server-service (tabblad "SQL Server Services") en kies "Eigenschappen"
- op het tabblad "Geavanceerd" zet u
-g512;
naar de instelling "Opstartparameters" - start de SQL Server-service opnieuw
Zie het MSDN-artikel hier voor meer informatie over de instelling "memory_to_reserve".