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

2 formas de devolver una lista de servidores vinculados en SQL Server usando T-SQL

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 |
+--------+------------+-----------------+