Konečně, po několika neúspěšných pokusech nechat SQL Server „promluvit“ s databází Accessu – buď jako „Propojený server“ v SSMS nebo přes OPENROWSET()
v T-SQL – Našel jsem tento blogový příspěvek, který nabízí následující tři (3) návrhy.
Tweak #1:Nastavení poskytovatele OLE DB
Poskytovatel OLE DB pro ACE (nebo Jet) musí mít povoleny možnosti "Dynamický parametr" a "Povolit zpracování". V SSMS otevřete
Objekty serveru> Propojené servery>Poskytovatelé
větev, klikněte pravým tlačítkem na "Microsoft.ACE.OLEDB.12.0" (nebo "Microsoft.Jet.OLEDB.4.0"), vyberte "Vlastnosti" a ujistěte se, že jsou vybrány tyto možnosti:
Tweak #2:Oprávnění složky Temp
To je ten, který mě zarazil.
SQL Server zjevně potřebuje zapsat informace do dočasného souboru při spuštění dotazu OLE DB proti databázi Accessu. Protože SQL Server běží jako služba, používá složku %TEMP% účtu, pod kterým služba běží.
Pokud je služba SQL Server spuštěna pod vestavěným účtem "Network Service", pak je dočasná složka
%SystemRoot%\ServiceProfiles\NetworkService\AppData\Local\Temp
a pokud běží pod vestavěným účtem "Local Service", pak je složka temp
%SystemRoot%\ServiceProfiles\LocalService\AppData\Local\Temp
Můj problém byl, že SSMS běželo pod mým účet (nikoli NETWORK SERVICE), takže jsem měl přístup pouze ke čtení do složky Temp
Jakmile jsem si udělil oprávnění k úpravě této složky
a povolil dotazy OPENROWSET, jak je zdokumentováno v jiné otázce zde, konkrétně ...
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO
... můj dotaz fungoval dobře:
Tweak #3:memory_to_reserve
Ačkoli jsem to v mém případě nepotřeboval, zmíněný blog také tvrdí, že úprava spouštěcího parametru "-g memory_to_reserve" pro službu SQL Server může také pomoci vyhnout se podobným chybám. Chcete-li to provést:
- spusťte SQL Server Configuration Manager
- klikněte pravým tlačítkem na službu SQL Server (karta "Služby SQL Server") a zvolte "Vlastnosti"
- na kartě "Upřesnit" přidejte před řetězec
-g512;
na nastavení "Parametry spouštění" - restartujte službu SQL Server
Další podrobnosti o nastavení "memory_to_reserve" naleznete v článku MSDN zde.