Finalmente, após várias tentativas malsucedidas de fazer com que o SQL Server "fale" com um banco de dados do Access - como um "Servidor vinculado" no SSMS ou via
OPENROWSET()
em T-SQL – encontrei esta postagem no blog que oferecia as três (3) sugestões a seguir. Ajuste nº 1:configurações do provedor OLE DB
O provedor OLE DB para ACE (ou Jet) deve ter as opções "Parâmetro dinâmico" e "Permitir em processo" habilitadas. No SSMS, abra o
Objetos de servidor> Servidores vinculados> Provedores
branch, clique com o botão direito do mouse em "Microsoft.ACE.OLEDB.12.0" (ou "Microsoft.Jet.OLEDB.4.0"), escolha "Propriedades" e certifique-se de que essas opções estejam selecionadas:
Ajuste nº 2:permissões da pasta temporária
Este é o que estava me atrapalhando.
Aparentemente, o SQL Server precisa gravar informações em um arquivo temporário enquanto executa uma consulta OLE DB em um banco de dados do Access. Como o SQL Server está sendo executado como um serviço, ele usa a pasta %TEMP% da conta na qual o serviço está sendo executado.
Se o serviço do SQL Server estiver sendo executado na conta interna "Serviço de rede", a pasta temporária será
%SystemRoot%\ServiceProfiles\NetworkService\AppData\Local\Temp
e se estiver sendo executado na conta "Serviço local" integrada, a pasta temporária será
%SystemRoot%\ServiceProfiles\LocalService\AppData\Local\Temp
Meu problema era que o SSMS estava sendo executado em meu conta (não NETWORK SERVICE), então eu só tinha acesso de leitura à pasta Temp
Depois de me conceder permissões de modificação nessa pasta
e habilitei as consultas OPENROWSET conforme documentado em outra pergunta aqui, a saber ...
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO
... minha consulta funcionou bem:
Ajuste nº 3:memory_to_reserve
Embora eu não precise usá-lo no meu caso, o blog mencionado também afirma que ajustar o parâmetro de inicialização "-g memory_to_reserve" para o serviço SQL Server também pode ajudar a evitar erros semelhantes. Fazer isso:
- iniciar o SQL Server Configuration Manager
- clique com o botão direito do mouse no serviço do SQL Server (guia "Serviços do SQL Server") e escolha "Propriedades"
- na guia "Avançado", adicione
-g512;
para a configuração "Parâmetros de inicialização" - reiniciar o serviço SQL Server
Para obter mais detalhes sobre a configuração "memory_to_reserve", consulte o artigo do MSDN aqui.