Als u Transact-SQL moet gebruiken om een lijst te krijgen van alle gekoppelde servers in SQL Server, vindt u hieronder twee manieren waarop u dit kunt doen.
In het eerste voorbeeld gebruik ik de sp_linkedservers
systeem opgeslagen procedure om de gekoppelde servers te retourneren. In het tweede voorbeeld gebruik ik de sys.servers
systeemcatalogusweergave.
Voorbeeld 1 – De sp_linkedservers
Opgeslagen procedure
De sp_linkedservers
systeem opgeslagen procedure is speciaal ontworpen voor het retourneren van een lijst met gekoppelde servers gedefinieerd in de lokale server.
Om het uit te voeren, doe dit:
EXEC sp_linkedservers;
Resultaat:
+--------------+--------------------+---------------+------------------+----------------------+----------------+-----------+ | 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 | +--------------+--------------------+---------------+------------------+----------------------+----------------+-----------+
In dit geval krijg ik twee rijen. Eigenlijk is de eerste rij mijn lokale server. De lokale server heeft een gekoppelde server genaamd "Homer", en die wordt weergegeven in de tweede rij.
Voorbeeld 2 – De sys.servers
Systeemweergave
De sys.servers
systeemcatalogusweergave bevat een rij per geregistreerde gekoppelde of externe server en een rij voor de lokale server met een
server_id
van 0
.
Deze weergave retourneert nogal wat kolommen, dus ik gebruik verticale uitvoer om de resultaten in dit voorbeeld weer te geven.
Voorbeeld:
SELECT * FROM sys.servers;
Resultaat (met verticale uitvoer):
-[ 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
Je krijgt veel meer informatie met het uitzicht.
U kunt natuurlijk ook alleen die kolommen specificeren waarin u geïnteresseerd bent.
Bijvoorbeeld:
SELECT name, provider, data_source FROM sys.servers;
Resultaat:
+--------------+------------+-----------------+ | name | provider | data_source | |--------------+------------+-----------------| | c1b060f68fcb | SQLNCLI | c1b060f68fcb | | Homer | SQLNCLI | 172.17.0.2,1433 | +--------------+------------+-----------------+
En als u niet wilt dat de lokale server wordt geretourneerd, kunt u WHERE is_linked = 1
toevoegen op uw vraag:
SELECT name, provider, data_source FROM sys.servers WHERE is_linked = 1;
Resultaat:
+--------+------------+-----------------+ | name | provider | data_source | |--------+------------+-----------------| | Homer | SQLNCLI | 172.17.0.2,1433 | +--------+------------+-----------------+