Endelig, efter adskillige mislykkede forsøg på at få SQL Server til at "tale til" en Access-database – enten som en "Linked Server" i SSMS eller via OPENROWSET()
i T-SQL – Jeg fandt dette blogindlæg, der gav følgende tre (3) forslag.
Tweak #1:OLE DB-udbyderindstillinger
OLE DB-udbyderen til ACE (eller Jet) skal have indstillingerne "Dynamisk parameter" og "Tillad inprocess" aktiveret. I SSMS skal du åbne
Serverobjekter> Sammenkædede servere>Udbydere
gren, højreklik på "Microsoft.ACE.OLEDB.12.0" (eller "Microsoft.Jet.OLEDB.4.0"), vælg "Egenskaber", og sørg for, at disse muligheder er valgt:
Tweak #2:Temp-mappetilladelser
Det var den, der overraskede mig.
Tilsyneladende skal SQL Server skrive information ind i en midlertidig fil, mens du kører en OLE DB-forespørgsel mod en Access-database. Fordi SQL Server kører som en tjeneste, bruger den mappen %TEMP% på den konto, som tjenesten kører under.
Hvis SQL Server-tjenesten kører under den indbyggede "Netværkstjeneste"-konto, er den midlertidige mappe
%SystemRoot%\ServiceProfiles\NetworkService\AppData\Local\Temp
og hvis den kører under den indbyggede "Lokal Service"-konto, er den midlertidige mappe
%SystemRoot%\ServiceProfiles\LocalService\AppData\Local\Temp
Mit problem var, at SSMS kørte under min konto (ikke NETVÆRKSSERVICE), så jeg havde kun læseadgang til Temp-mappen
Engang gav jeg mig selv Rediger tilladelser på den mappe
og aktiverede OPENROWSET-forespørgsler som dokumenteret i et andet spørgsmål her, nemlig ...
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO
... min forespørgsel fungerede fint:
Tweak #3:memory_to_reserve
Selvom jeg ikke behøvede at bruge det i mit tilfælde, hævder den førnævnte blog også, at justering af "-g memory_to_reserve"-startparameteren for SQL Server-tjenesten også kan hjælpe med at undgå lignende fejl. For at gøre det:
- start SQL Server Configuration Manager
- højreklik på SQL Server-tjenesten ("SQL Server Services"-fanen), og vælg "Egenskaber"
- på fanen "Avanceret" skal du sætte
-g512;
foran til indstillingen "Opstartsparametre" - genstart SQL Server-tjenesten
For flere detaljer om indstillingen "memory_to_reserve" se MSDN-artiklen her.