Slutligen, efter flera misslyckade försök att få SQL Server att "prata med" en Access-databas – antingen som en "länkad server" i SSMS eller via OPENROWSET()
i T-SQL – Jag hittade det här blogginlägget som gav följande tre (3) förslag.
Tweak #1:OLE DB-leverantörsinställningar
OLE DB-leverantören för ACE (eller Jet) måste ha alternativen "Dynamic parameter" och "Allow inprocess" aktiverade. I SSMS öppnar du
Serverobjekt> Länkade servrar>Leverantörer
högerklicka på "Microsoft.ACE.OLEDB.12.0" (eller "Microsoft.Jet.OLEDB.4.0"), välj "Egenskaper" och se till att dessa alternativ är valda:
Tweak #2:Temp-mappbehörigheter
Det här var den som överraskade mig.
Uppenbarligen behöver SQL Server skriva information i en temporär fil när en OLE DB-fråga körs mot en Access-databas. Eftersom SQL Server körs som en tjänst använder den mappen %TEMP% för kontot som tjänsten körs under.
Om SQL Server-tjänsten körs under det inbyggda "Network Service"-kontot är temp-mappen
%SystemRoot%\ServiceProfiles\NetworkService\AppData\Local\Temp
och om den körs under det inbyggda "Local Service"-kontot är temp-mappen
%SystemRoot%\ServiceProfiles\LocalService\AppData\Local\Temp
Mitt problem var att SSMS kördes under min konto (inte NÄTVERKSTJÄNST) så jag hade bara läsbehörighet till Temp-mappen
När jag gav mig själv Ändra behörigheter för den mappen
och aktiverade OPENROWSET-frågor som dokumenterats i en annan fråga här, nämligen ...
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO
... min fråga fungerade bra:
Tweak #3:memory_to_reserve
Även om jag inte behövde använda den i mitt fall, hävdar den tidigare nämnda bloggen också att justering av startparametern "-g memory_to_reserve" för SQL Server-tjänsten också kan hjälpa till att undvika liknande fel. För att göra det:
- starta SQL Server Configuration Manager
- högerklicka på SQL Server-tjänsten ("SQL Server Services"-fliken) och välj "Egenskaper"
- på fliken "Avancerat" lägger du till
-g512;
till inställningen "Startparametrar" - starta om SQL Server-tjänsten
För mer information om inställningen "memory_to_reserve" se MSDN-artikeln här.