Marko Zivkovic
C:\Users\Marko\AppData\Local\Microsoft\Windows\INetCache\Content.Word\9.png

Cómo crear, configurar y eliminar un servidor vinculado a SQL Server mediante Transact-SQL

August 1, 2019 by

Los servidores vinculados permiten obtener datos a partir de una alternativa como ser de una instancia diferente de SQL Server utilizando una sola instrucción T-SQL.

Este artículo podrá explicar cómo crear, configurar y eliminar un servidor vinculado a SQL Server a través y mediante procedimientos almacenados del sistema.

Adicionalmente, hay una manera de crear y configurar un servidor vinculado a otra instancia de SQL Server utilizando SQL Server Management Studio (SSMS). Por ello para ver cómo configurar un servidor vinculado mediante la GUI de SSMS, debe consultar el artículo Cómo crear y configurar un servidor vinculado en SQL Server Management Studio..

Creando un servidor vinculado a SQL Server

Para crear un servidor vinculado, use el procedimiento sp_addlinkedserver.

Ejecutando el siguiente código:

Esto creará un servidor vinculado con el nombre TestServer en la carpeta Linked Servers:

Para este fin una manera de obtener las bases de datos del servidor SQL remoto, es importante que deba ingresar el nombre exacto del servidor SQL.

Para el comando predeterminado de SQL Server, es importante escribir el nombre de la computadora que instala la instancia de SQL Server (por ejemplo, WSERVER2012):

Para el comando de nombre de SQL Server, debe escribir el nombre de la computadora y el nombre de la instancia separados por una barra (por ejemplo, WSERVER2012\SQLEXPRESS):

Los resultados serán algo así:

Una vez que haya creado un servidor vinculado como este de forma predeterminada, el mismo pasará el contexto de seguridad actual del inicio de sesión local al inicio de sesión remoto.

Para tal fin la ventana o las credenciales de inicio de sesión locales se utilizarán si se selecciona la autenticación de Windows o SQL Server, respectivamente. Por ello para conectarse con éxito a un servidor SQL remoto, es importante que el usuario exacto con el mismo nombre de usuario y contraseña debe existir en el servidor remoto:

Por otra parte, además de definir un parámetro para el nombre del servidor vinculado y el nombre del producto, mientras se utiliza el sp_addlinkedserver, otros parámetros son: nombre del proveedor, fuente de datos, ubicación, cadena del proveedor, , es posible que se puede configurar el catálogo:

@server es un nombre del servidor vinculado:

@srvproduct es el nombre del producto de la fuente de datos OLE DB que está agregando como servidor vinculado (por ejemplo, ‘SQL Server’, ‘Microsoft.Jet.OLEDB.4.0’, ’Oracle’, etc.). El parámetro @srvproduct es nvarchar (128) tipo de datos, es por defecto este parámetro NULL. Al utilizar SQL Server como nombre del producto, vera que no es necesario especificar el nombre del proveedor, la fuente de datos, la ubicación, la cadena del proveedor, y los parámetros del catálogo:

@provider es el nombre del proveedor OLE DB y por esta razón debe ser único para el proveedor OLE DB especificado e instalado en la computadora actual:

El parámetro @provider es el tipo de datos nvarchar (128), es por defecto este parámetro NULL. Si se omite el parámetro del nombre del proveedor, se usa SQLNCLI (SQL Server Native Client):

@datasrc es el nombre del origen de datos tal como lo interpreta el proveedor OLE DB. Si por otra parte se está conectado a una instancia de SQL Server, se debe proporcionar el nombre de la instancia:

Cuando se crea un servidor vinculado como este, un nombre del servidor en el parámetro @server puede ser cualquier nombre, por esta razón no es necesario que sea un nombre de un servidor remoto:

Si está utilizando otro origen de datos (por ejemplo, un archivo de Excel), se debe proporcionar la ruta completa al archivo de Microsoft Excel en el parámetro @datasrc:

@location es la ubicación de la base de datos (fuente), si así lo requiere el proveedor OLE DB. El parámetro @location es nvarchar (4000) tipo de datos, ya que por defecto este parámetro es NULL.

@provstres la cadena OLEDB que identifica la fuente. El parámetro @provstres la cadena OLEDB que identifica la fuente. El parámetro SQLNCLI en el parámetro @provstr se puede especificar la instancia de SQL Server a la que se conectará el usuario:

@catalog es el nombre del catálogo o el nombre de la base de datos para el servidor SQL, de forma predeterminada, este parámetro es NULL. Por ello cuando el servidor vinculado se define en una instancia de SQL Server, vera que el catálogo hace referencia a la base de datos predeterminada a la que se asigna el servidor vinculado.

Si así se lo desea se puede encontrar más información sobre los parámetros de sp_addlinkedserver en este enlace.

Cree o actualice una asignación entre un inicio de sesión en la instancia local de SQL Server y la cuenta en un SQL Server remoto

Después de crear un servidor vinculado utilizando el procedimiento sp_addlinkedserver:

Use sp_addlinkedsrvlogin para crear o modificar una asignación de inicio de sesión local a los inicios de sesión remotos utilizando la siguiente sintaxis:

@rmtsrvname es el nombre del servidor remoto (servidor vinculado) al que se aplica la asignación de inicio de sesión:

@useself se utiliza para determinar cómo se establecerá la conexión con el servidor remoto. Hay tres estados ‘Verdadero’, ‘Falso’, ‘Nulo’.

Por otra parte, si se usara el estado ‘Verdadero’, el contexto de seguridad actual del inicio de sesión local se pasará al inicio de sesión remoto.

La ventana o las credenciales de inicio de sesión locales se utilizarán una vez que se selecciona la autenticación de Windows o SQL Server, respectivamente

Al ejecutar el código SQL anterior, los siguientes resultados aparecerán en la carpeta de catálogos para la autenticación de SQL Server y el usuario local ‘Jack’:

Nota: para conectarse con éxito a un servidor remoto, el usuario con el mismo nombre de usuario y contraseña exactamente debe existir en el servidor remoto.

En el caso en el cual se conecte a un servidor SQL Server local usando la autenticación del servidor SQL con credenciales de inicio de sesión de usuario local y que no existan en el servidor remoto (por ejemplo, el usuario ‘Ben’), los resultados en la carpeta Catálogo pueden tener este aspecto:

El mismo contexto de seguridad se debe utilizar al crear un servidor vinculado con el procedimiento sp_addlinkedserver:

El parámetro @useself es un tipo de datos varchar(8), por ello de forma predeterminada, este parámetro se establece en ‘Verdadero’.

Si el valor ‘False’ se establece en @useself parámetro, entonces el inicio de sesión del servidor local usa los argumentos especificados en los parámetros @rmtuser y @rmtpassword para iniciar sesión en el servidor vinculado:

Ahora, es importante indicar que cuando el usuario local ‘Ben’ inicie sesión en el servidor SQL local, en la carpeta Catálogos, seguidamente se mostrarán todas las bases de datos disponibles en un servidor remoto para el inicio de sesión remoto ‘Jack’:

Por otra parte, para un servidor vinculado que no requiere nombre de usuario y contraseña (por ejemplo, Microsoft Access), estos argumentos se pueden establecer en Null.

@locallogin es un inicio de sesión local, de forma predeterminada, este parámetro se establece en Nulo. Para es te fin puede designar un inicio de sesión individual o todos los inicios de sesión locales. Para especificar que todos los inicios de sesión locales se vean afectados, pase un Nulo a este parámetro. Si no es Null, en el parámetro @locallogin puede ser un inicio de sesión de SQL Server o un inicio de sesión de Windows.

@rmtuser es el nombre de usuario del inicio de sesión remoto que se utiliza para conectarse a un servidor remoto si @useself está configurado como ‘Falso’.

@rmtpassword es la contraseña del usuario remoto que se usa para conectarse a un servidor remoto si @useself está configurado como ‘Falso’.

Establecer las opciones de un servidor vinculado a SQL Server

Además, de que se pueda configurar un servidor vinculado utilizando el procedimiento de sp_serveroption. Aquí se pueden configurar las opciones relacionadas con un servidor vinculado como: collation compatible, nombre de colation, tiempo de espera de conexión, acceso a datos, validación de esquema perezoso, rpc, rpc out, usar collation remota, etc., ejecutando el siguiente código:

@server es el nombre del servidor vinculado para el que se establece la opción.

@optname el nombre de la opción a configurar.

@optvalueel valor de la opción. Los valores activados válidos son Verdadero o Activado para habilitar y Falso o Desactivado para deshabilitar la opción, un entero no negativo para las opciones de tiempo de espera de conexión y tiempo de espera de consulta, o el nombre de intercalación para la opción de nombre de intercalación.

El siguiente ejemplo, habilita las llamadas a procedimientos remotos al servidor vinculado ‘WSERVER2012\SQLEXPRESS’:

Para permitir/denegar a un servidor vinculado el acceso a consultas distribuidas, use el ‘acceso de datos’ de @optname. A continuación, el siguiente ejemplo, deshabilita la consulta distribuida al servidor vinculado ‘WSERVER2012\SQLEXPRESS’

Ahora al momento cuando ejecute una consulta de servidor vinculado:

Aparecerá el siguiente mensaje de error

Msg 7411, Nivel 16, Estado 1, Línea 1 El servidor ‘WSERVER2012\SQLEXPRESS’ no está configurado para ACCESO A DATOS.

Para establecer el tiempo de espera de la consulta, use el ‘tiempo de espera de la consulta’de @optname. En esta situación se puede configurar cuánto tiempo, en segundos, puede tomar un proceso remoto antes de que se agote el tiempo. A continuación del siguiente ejemplo, el tiempo de espera de la consulta se establece en 120 segundos:

Es importante indicar que puede encontrar más información sobre las opciones en el procedimiento sp_serveroption en este enlace.

Obtención de información (configuración) sobre un servidor vinculado de SQL Server

Es importante que para ver la información sobre los servidores vinculados y las fuentes de datos a las que se hace referencia, se puede usar SQL Server Management Studio o los procedimientos almacenados del sistema.

A continuación, se dispone y se muestra la lista de los procedimientos almacenados del sistema más utilizados.

Recuerde que para ver todo acerca de las asignaciones de inicio de sesión definidas en un servidor vinculado específico, ejecute el procedimiento sp_helplinkedsrvlogin.

@rmtsrvname el nombre del servidor vinculado recuerde que para el que desea ver la configuración de inicio de sesión, por defecto este parámetro es nulo

@locallogin es el inicio de sesión local el que mantiene una asignación al servidor vinculado, de forma predeterminada, este parámetro se establece en Nulo

En el ejemplo a continuación es importante ver que se muestran todas las asignaciones de inicio de sesión para todos los servidores vinculados definidos en la máquina local:

El resultado será algo así:

Linked Server Local Login Is Self Mapping Remote Login
WSERVER2012\CTP21 Null 1 Null
WSERVER2012\SQLEXPRESS Null 1 Null
WSERVER2012\SQLEXPRESS WSERVER2012\Zivko 1 Null
WSERVER2012\SQLEXPRESS Ben 0 Jack

Servidor vinculado es el nombre del servidor vinculado.

En el inicio de sesión local se muestra a qué usuarios locales se ven afectados por esta asignación. Si se establece Nulo, esta asignación se aplica a todos los usuarios que no tienen asignaciones específicas.

Si es Auto asignación, si muestra 1, el inicio de sesión local y la contraseña se utilizan al conectarse a un servidor vinculado. Si se muestra 0, el valor de la columna Inicio de sesión remoto se utiliza para conectarse a un servidor vinculado. Recuerde y tenga en cuenta que la contraseña remota no se muestra por razones de seguridad.

Recuerde que para mostrar todas las asignaciones de inicio de sesión para un servidor vinculado específico, ejecute lo siguiente:


Linked Server Local Login Is Self Mapping Remote Login
WSERVER2012\SQLEXPRESS Null 1 Null
WSERVER2012\SQLEXPRESS WSERVER2012\Zivko 1 Null
WSERVER2012\SQLEXPRESS Ben 0 Jack

Adicionalmente para mostrar todas las asignaciones de inicio de sesión para un inicio de sesión local, ejecute lo siguiente:


Linked Server Local Login Is Self Mapping Remote Login
WSERVER2012\SQLEXPRESS Ben 0 Jack

sp_linkedservers este procedimiento devuelve una lista de servidores vinculados definidos en el servidor local


sp_catalogs este procedimiento muestra una lista de catálogos para el servidor vinculado especificado

Recuerde que básicamente, esto muestra una lista de las bases de datos disponibles para el servidor vinculado elegido:

sp_tables_ex muestra la información de la tabla sobre las tablas para el servidor vinculado especificado:


sp_columns_ex muestra información de columna para todas las columnas o una columna especificada en una tabla remota


sp_table_privileges_ex muestra los permisos de la tabla para una tabla de servidor vinculado.


sp_column_privileges_ex muestra una lista de privilegios para columnas en una tabla específica para un servidor vinculado


sp_testlinkedserver este procedimiento prueba la conexión a un servidor vinculado:

Adicionalmente si la prueba falla, el mismo devuelve un mensaje de error con el motivo de la falla.

Es importante ver que a continuación se muestra un ejemplo en el que se crea un servidor vinculado llamado ‘WSERVER2012’ y luego se prueba la conexión:

Probar una conexión de servidor vinculado:

Motivo de la falla:

Cuando el proveedor OLE DB “SQLNCLI11” para el servidor vinculado “WSERVER2012” devolvió el mensaje “El tiempo de espera de inicio de sesión caducó”. Cuando el proveedor OLE DB “SQLNCLI11” para el servidor vinculado “WSERVER2012” devolvió el mensaje “Se produjo un error relacionado con la red o específico de la instancia al establecer una conexión a SQL Server. Entonces el servidor no se encuentra o no es accesible. Compruebe si el nombre de la instancia es correcto y si SQL Server está configurado para permitir conexiones remotas. Para obtener más información, consulte los libros en línea de SQL Server “.
Msg 2, nivel 16, estado 1, línea 6
Proveedor de canalizaciones con nombre: No se pudo abrir una conexión a SQL Server [2].

Es importante que, para ver la configuración de un servidor vinculado desde SQL Server Management Studio, haga clic con el botón derecho en el servidor vinculado debajo de la carpeta Servidor vinculado y elija el comando Propiedades:

Entonces esto abrirá el cuadro de diálogo Propiedades del servidor vinculado:

Es importante ver que en la parte superior derecha del cuadro de diálogo, hay tres pestañas (General, Seguridad, Opciones de servidor) en las que se pueden ver todas las configuraciones para el servidor vinculado seleccionado.

Hay que verificar que, para mostrar todas las configuraciones para un servidor vinculado elegido en un editor de consultas, haga clic con el botón derecho en el nombre de un servidor vinculado en la carpeta Servidores vinculados. Cuando se entra en el menú contextual, elija Servidor vinculado a secuencias de comandos como -> Crear para -> Nueva ventana del Editor de consultas comando:

Esto creará un script .sql con todas las configuraciones que contienen el servidor vinculado elegido:

Eliminar un mapeo

Para eliminar una asignación existente entre un inicio de sesión local y un inicio de sesión en un servidor vinculado, es importante utilizar el procedimiento almacenado del sistema sp_droplinkedsrvlogin.

@rmtsrvname es el nombre de un servidor vinculado al que se aplica la asignación de inicio de sesión. A tal fin debe existir un servidor vinculado en la carpeta Servidor vinculado; de lo contrario, aparecerá el siguiente mensaje de error al ejecutar el procedimiento sp_droplinkedsrvlogin:

Msg 15015, Nivel 16, Estado 1, Procedimiento sp_droplinkedsrvlogin, Línea 32 [Línea de inicio de lote 0]
El servidor ‘WSERVER2012’ no existe. Utilice sp_helpserver para mostrar los servidores disponibles.

@locallogin es el inicio de sesión local que se ha asignado a un servidor vinculado. Es importante indicar que debe existir una asignación para el inicio de sesión local en un servidor remoto; de lo contrario, podrá aparecer el siguiente mensaje de error:

Msg 15007, Nivel 16, Estado 1, Procedimiento sp_droplinkedsrvlogin, Línea 51 [Línea de inicio de lote 0]
‘Jana’ no es un inicio de sesión válido o no tiene permiso.

Si la propiedad @locallogin se establece en Null, se eliminará la asignación predeterminada que se crea cuando se crea un servidor vinculado mediante el procedimiento sp_addlinkedserver.

A continuación, en el siguiente ejemplo se eliminará la asignación de inicio de sesión del usuario local ‘Ben’ al servidor vinculado ‘WSERVER2012\SQLEXPRESS’:

Recuerde que este código eliminará la asignación de inicio de sesión predeterminada para todos los usuarios del servidor vinculado con ‘WSERVER2012\SQLEXPRESS’:

Eliminar un servidor vinculado a SQL Server

Para eliminar un servidor vinculado, desde la carpeta del servidor vinculado debe usarse el procedimiento sp_dropserver:

@server es el nombre del servidor que se eliminará.

@droplogins si el valor de ‘droplogins’ está establecido, consecuentemente entonces todos los inicios de sesión para el servidor remoto especificado se eliminarán, de forma predeterminada, luego la propiedad @droplogins se establece en Null.

Ahora, al ejecutar este código:

Aparecerá el siguiente mensaje de error:

Msg 15190, Nivel 16, Estado 1, Procedimiento sys.sp_dropserver, Línea 56 [Línea de inicio de lote 3]
Es importante verificar que todavía hay inicios de sesión remotos o inicios de sesión vinculados para el servidor ‘WSERVER2012\SQLEXPRESS’.

Para resolver este problema, hay dos soluciones:

  1. 1. Se debe eliminar todos los inicios de sesión relacionados con un servidor vinculado mediante el procedimiento sp_droplinkedsrvlogin y luego se debe ejecutar el código mencionado anteriormente
  2. En lugar de un valor nulo para la propiedad @droplogins en el procedimiento sp_dropserver, simplemente se debe colocar el valor ‘droplogins’ y luego todos los inicios de sesión relacionados con un servidor vinculado seleccionado se eliminarán junto con un servidor vinculado:

Otros artículos de esta serie:

Marko Zivkovic

Marko Zivkovic

Marko es un ingeniero mecánico a quien le gusta jugar basketball, football (table-soccer) y escuchar música rock. Está interesado en código SQL, desarrollo PHP y técnicas en HTML y CSS.
Actualmente trabajando para ApexSQL LLC como un Ingeniero de Ventas de Software, él está ayudando a los clientes con problemas técnicos y hace aseguramiento de calidad para los complementos ApexSQL Complete, ApexSQL Refactor y ApexSQL Search.

Ver todas las entradas de Marko Zivkovic
Marko Zivkovic
978 Views