Si vous avez besoin d'utiliser Transact-SQL pour obtenir une liste de tous les serveurs liés dans SQL Server, voici deux façons de procéder.
Dans le premier exemple, j'utilise le sp_linkedservers
procédure stockée système pour renvoyer les serveurs liés. Dans le deuxième exemple, j'utilise le sys.servers
vue du catalogue système.
Exemple 1 – Les sp_linkedservers
Procédure stockée
Les sp_linkedservers
La procédure stockée du système est conçue spécifiquement pour renvoyer une liste de serveurs liés définis dans le serveur local.
Pour l'exécuter, procédez comme suit :
EXEC sp_linkedservers;
Résultat :
+--------------+--------------------+---------------+------------------+----------------------+----------------+-----------+ | 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 | +--------------+--------------------+---------------+------------------+----------------------+----------------+-----------+
Dans ce cas, j'obtiens deux lignes. En fait, la première ligne est mon serveur local. Le serveur local a un serveur lié appelé "Homer", et qui est affiché dans la deuxième ligne.
Exemple 2 – Le sys.servers
Vue système
Les sys.servers
la vue du catalogue système contient une ligne par serveur lié ou distant enregistré, et une ligne pour le serveur local qui a un
server_id
de 0
.
Cette vue renvoie pas mal de colonnes, je vais donc utiliser la sortie verticale pour afficher les résultats dans cet exemple.
Exemple :
SELECT * FROM sys.servers;
Résultat (en utilisant la sortie verticale) :
-[ 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
Vous obtenez beaucoup plus d'informations avec la vue.
Bien sûr, vous pouvez également spécifier uniquement les colonnes qui vous intéressent.
Par exemple :
SELECT name, provider, data_source FROM sys.servers;
Résultat :
+--------------+------------+-----------------+ | name | provider | data_source | |--------------+------------+-----------------| | c1b060f68fcb | SQLNCLI | c1b060f68fcb | | Homer | SQLNCLI | 172.17.0.2,1433 | +--------------+------------+-----------------+
Et si vous ne voulez pas que le serveur local soit renvoyé, vous pouvez ajouter WHERE is_linked = 1
à votre requête :
SELECT name, provider, data_source FROM sys.servers WHERE is_linked = 1;
Résultat :
+--------+------------+-----------------+ | name | provider | data_source | |--------+------------+-----------------| | Homer | SQLNCLI | 172.17.0.2,1433 | +--------+------------+-----------------+