Se você precisar usar o Transact-SQL para obter uma lista de todos os servidores vinculados no SQL Server, veja abaixo duas maneiras de fazer isso.
No primeiro exemplo eu uso os
sp_linkedservers
procedimento armazenado do sistema para retornar os servidores vinculados. No segundo exemplo eu uso o sys.servers
visualização do catálogo do sistema. Exemplo 1 – Os sp_linkedservers
Procedimento armazenado
Os
sp_linkedservers
procedimento armazenado do sistema é projetado especificamente para retornar uma lista de servidores vinculados definidos no servidor local. Para executá-lo, faça assim:
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 | +--------------+--------------------+---------------+------------------+----------------------+----------------+-----------+
Neste caso, recebo duas linhas. Na verdade, a primeira linha é meu servidor local. O servidor local possui um servidor vinculado chamado “Homer” e é exibido na segunda linha.
Exemplo 2 – Os sys.servers
Visualização do sistema
Os
sys.servers
a visualização do catálogo do sistema contém uma linha por servidor vinculado ou remoto registrado e uma linha para o servidor local que possui um
server_id
de 0
. Essa exibição retorna algumas colunas, então usarei a saída vertical para exibir os resultados neste exemplo.
Exemplo:
SELECT * FROM sys.servers;
Resultado (usando saída 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
Você obtém muito mais informações com a visualização.
Claro, você também pode especificar apenas as colunas nas quais está interessado.
Por exemplo:
SELECT name, provider, data_source FROM sys.servers;
Resultado:
+--------------+------------+-----------------+ | name | provider | data_source | |--------------+------------+-----------------| | c1b060f68fcb | SQLNCLI | c1b060f68fcb | | Homer | SQLNCLI | 172.17.0.2,1433 | +--------------+------------+-----------------+
E se você não quiser que o servidor local seja retornado, você pode adicionar
WHERE is_linked = 1
à sua 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 | +--------+------------+-----------------+