Si necesita usar Transact-SQL para obtener una lista de todos los servidores vinculados en SQL Server, a continuación hay dos formas de hacerlo.
En el primer ejemplo uso el sp_linkedservers
procedimiento almacenado del sistema para devolver los servidores vinculados. En el segundo ejemplo uso el sys.servers
vista del catálogo del sistema.
Ejemplo 1:los sp_linkedservers
Procedimiento almacenado
Los sp_linkedservers
El procedimiento almacenado del sistema está diseñado específicamente para devolver una lista de servidores vinculados definidos en el servidor local.
Para ejecutarlo, haz esto:
EXEC sp_linkedservers;
Resultado:
+--------------+--------------------+---------------+------------------+----------------------+----------------+-----------+ | SRV_NAME | SRV_PROVIDERNAME | SRV_PRODUCT | SRV_DATASOURCE | SRV_PROVIDERSTRING | SRV_LOCATION | SRV_CAT | |--------------+--------------------+---------------+------------------+----------------------+----------------+-----------| | c1b060f68fcb | SQLNCLI | SQL Server | c1b060f68fcb | NULL | NULL | NULL | | Homer | SQLNCLI | | 172.17.0.2,1433 | NULL | NULL | NULL | +--------------+--------------------+---------------+------------------+----------------------+----------------+-----------+
En este caso obtengo dos filas. En realidad, la primera fila es mi servidor local. El servidor local tiene un servidor vinculado llamado "Homer", que se muestra en la segunda fila.
Ejemplo 2:los sys.servers
Vista del sistema
Los sys.servers
La vista del catálogo del sistema contiene una fila por servidor vinculado o remoto registrado y una fila para el servidor local que tiene un
server_id
de 0
.
Esta vista devuelve bastantes columnas, por lo que usaré la salida vertical para mostrar los resultados en este ejemplo.
Ejemplo:
SELECT * FROM sys.servers;
Resultado (usando salida vertical):
-[ RECORD 1 ]------------------------- server_id | 0 name | c1b060f68fcb product | SQL Server provider | SQLNCLI data_source | c1b060f68fcb location | NULL provider_string | NULL catalog | NULL connect_timeout | 0 query_timeout | 0 is_linked | 0 is_remote_login_enabled | 1 is_rpc_out_enabled | 1 is_data_access_enabled | 0 is_collation_compatible | 0 uses_remote_collation | 1 collation_name | NULL lazy_schema_validation | 0 is_system | 0 is_publisher | 0 is_subscriber | 0 is_distributor | 0 is_nonsql_subscriber | 0 is_remote_proc_transaction_promotion_enabled | 0 modify_date | 2019-09-27 00:30:06.820 is_rda_server | 0 -[ RECORD 2 ]------------------------- server_id | 1 name | Homer product | provider | SQLNCLI data_source | 172.17.0.2,1433 location | NULL provider_string | NULL catalog | NULL connect_timeout | 0 query_timeout | 0 is_linked | 1 is_remote_login_enabled | 0 is_rpc_out_enabled | 0 is_data_access_enabled | 1 is_collation_compatible | 0 uses_remote_collation | 1 collation_name | NULL lazy_schema_validation | 0 is_system | 0 is_publisher | 0 is_subscriber | 0 is_distributor | 0 is_nonsql_subscriber | 0 is_remote_proc_transaction_promotion_enabled | 1 modify_date | 2019-09-29 10:31:36.570 is_rda_server | 0
Obtienes mucha más información con la vista.
Por supuesto, también puede especificar solo aquellas columnas que le interesen.
Por ejemplo:
SELECT name, provider, data_source FROM sys.servers;
Resultado:
+--------------+------------+-----------------+ | name | provider | data_source | |--------------+------------+-----------------| | c1b060f68fcb | SQLNCLI | c1b060f68fcb | | Homer | SQLNCLI | 172.17.0.2,1433 | +--------------+------------+-----------------+
Y si no desea que se devuelva el servidor local, puede agregar WHERE is_linked = 1
a su consulta:
SELECT name, provider, data_source FROM sys.servers WHERE is_linked = 1;
Resultado:
+--------+------------+-----------------+ | name | provider | data_source | |--------+------------+-----------------| | Homer | SQLNCLI | 172.17.0.2,1433 | +--------+------------+-----------------+