Hvis du finder dig selv nødt til at bruge Transact-SQL for at få en liste over alle sammenkædede servere i SQL Server, er der to måder, du kan gøre dette på nedenfor.
I det første eksempel bruger jeg sp_linkedservers
systemlagret procedure for at returnere de sammenkædede servere. I det andet eksempel bruger jeg sys.servers
systemkatalogvisning.
Eksempel 1 – sp_linkedservers
Lagret procedure
sp_linkedservers
den systemlagrede procedure er designet specifikt til at returnere en liste over sammenkædede servere defineret på den lokale server.
For at udføre det, gør dette:
EXEC sp_linkedservers;
Resultat:
+--------------+--------------------+---------------+------------------+----------------------+----------------+-----------+ | 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 | +--------------+--------------------+---------------+------------------+----------------------+----------------+-----------+
I dette tilfælde får jeg to rækker. Faktisk er den første række min lokale server. Den lokale server har en forbundet server kaldet "Homer", og den vises i anden række.
Eksempel 2 – sys.servers
Systemvisning
sys.servers
systemkatalogvisningen indeholder en række pr. tilknyttet eller ekstern registreret server og en række for den lokale server, der har et
server_id
af 0
.
Denne visning returnerer en del kolonner, så jeg vil bruge lodret output til at vise resultaterne i dette eksempel.
Eksempel:
SELECT * FROM sys.servers;
Resultat (ved hjælp af lodret output):
-[ 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
Du får meget mere information med udsigten.
Du kan selvfølgelig også kun angive de kolonner, som du er interesseret i.
For eksempel:
SELECT name, provider, data_source FROM sys.servers;
Resultat:
+--------------+------------+-----------------+ | name | provider | data_source | |--------------+------------+-----------------| | c1b060f68fcb | SQLNCLI | c1b060f68fcb | | Homer | SQLNCLI | 172.17.0.2,1433 | +--------------+------------+-----------------+
Og hvis du ikke vil have den lokale server returneret, kan du tilføje WHERE is_linked = 1
til din forespørgsel:
SELECT name, provider, data_source FROM sys.servers WHERE is_linked = 1;
Resultat:
+--------+------------+-----------------+ | name | provider | data_source | |--------+------------+-----------------| | Homer | SQLNCLI | 172.17.0.2,1433 | +--------+------------+-----------------+