Recientemente me ha tocado configurar un linked server desde SQL SERVER 2012 hacia un archivo de access — sí, todavía hay aplicaciones que utilizan ese tipo de archivo–. No debería ser una tarea muy compleja pero hay un detalle interesante que puede provocarle a más de alguno un dolor de cabeza temporal.
Recomiendo crear el linked server mediante código ya que por medio de la ventada podría ser algo confuso.
Crear el Linked Server
/* Crear el Linked Server*/
EXEC sp_addlinkedserver
@server = N'Test',
@provider = N'Microsoft.ACE.OLEDB.12.0',
@srvproduct = N'OLE DB Provider for ACE',
@datasrc = N'\\ruta\del\archivo.mdb',
@provstr= N';PWD=contraseña';
Detalle de parámetros
@server: Nombre del linked server
@provider: Proveedor que dará el acceso al archivo de access, en la versión de SQL SERVER 2012 ya viene incluido, en versiones anteriores habrá que descargarlo
@srvproduct: Nombre del producto, para fines prácticos dejarlo igual
@datasrc: Ruta donde se encuentra el archivo mdb
@provstr: Clave con la que está protegido el archivo mdb.
Crear el login del Linked Server
/* Aunque la BBDD tenga password, hay que añadir el usuario Admin sin password */
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'Test',
@useself = 'FALSE' ,
@rmtuser = 'Admin' ,
@rmtpassword = NULL
El punto raro de esto es que en el parámetro @rmtpassword se debe enviar el valor NULL, de lo contrario no funcionará la conexión, la contraseña se envía en el parámetro @provstr de la creación del linked server.
Detalle de parámetros
@rmtsrvname: Nombre del linked server creado arriba
@useself: Determina si se quiere impersonar el usuario (hacerse pasar por), en este caso enviamos FALSO.
@rmtuser: nombre de usuario del archivo mdb.
@rmtpassword: clave del archivo, para este tipo de conexión en específico enviar NULL ya que la clave ha sido enviada en el parámetro @provstr de la creacion del linked server.
Observaciones adicionales
Asegurarse de que el usuario con el que se ejecuta el servicio de SQL SERVER tenga acceso a la carpeta donde se encuentra el archivo que se va a leer, es muy común que al no tener permiso este usuario, el linked server devuelva varios mensajes de error.