sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server 2012 consultando datos de Access 2007 usando el error OPENROWSET

Finalmente, después de varios intentos fallidos de que SQL Server "hable con" una base de datos de Access, ya sea como un "servidor vinculado" en SSMS o a través de OPENROWSET() en T-SQL:encontré esta publicación de blog que ofrecía las siguientes tres (3) sugerencias.

Tweak #1:configuración del proveedor OLE DB

El proveedor OLE DB para ACE (o Jet) debe tener habilitadas las opciones "Parámetro dinámico" y "Permitir en proceso". En SSMS, abra el

Objetos de servidor> Servidores vinculados>Proveedores

rama, haga clic con el botón derecho en "Microsoft.ACE.OLEDB.12.0" (o "Microsoft.Jet.OLEDB.4.0"), elija "Propiedades" y asegúrese de que esas opciones estén seleccionadas:

Tweak #2:Permisos de carpeta temporal

Este es el que me estaba dejando perplejo.

Aparentemente, SQL Server necesita escribir información en un archivo temporal mientras ejecuta una consulta OLE DB en una base de datos de Access. Dado que SQL Server se ejecuta como un servicio, utiliza la carpeta %TEMP% de la cuenta en la que se ejecuta el servicio.

Si el servicio de SQL Server se ejecuta en la cuenta integrada "Servicio de red", entonces la carpeta temporal es

%SystemRoot%\ServiceProfiles\NetworkService\AppData\Local\Temp

y si se está ejecutando en la cuenta integrada de "Servicio local", entonces la carpeta temporal es

%SystemRoot%\ServiceProfiles\LocalService\AppData\Local\Temp

Mi problema era que SSMS se ejecutaba en my cuenta (no SERVICIO DE RED), por lo que solo tenía acceso de lectura a la carpeta temporal

Una vez que me concedí Modificar permisos en esa carpeta

y habilitó consultas OPENROWSET como se documenta en otra pregunta aquí, a saber...

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO

... mi consulta funcionó bien:

Retoque #3:memory_to_reserve

Aunque no necesité usarlo en mi caso, el blog antes mencionado también afirma que ajustar el parámetro de inicio "-g memory_to_reserve" para el servicio de SQL Server también puede ayudar a evitar errores similares. Para hacer eso:

  • iniciar el Administrador de configuración de SQL Server
  • haga clic con el botón derecho en el servicio de SQL Server (pestaña "Servicios de SQL Server") y seleccione "Propiedades"
  • en la pestaña "Avanzado", anteponga -g512; a la configuración de "Parámetros de inicio"
  • reiniciar el servicio de SQL Server

Para obtener más detalles sobre la configuración "memory_to_reserve", consulte el artículo de MSDN aquí.