Wenn Sie feststellen, dass Sie Transact-SQL verwenden müssen, um eine Liste aller verknüpften Server in SQL Server zu erhalten, finden Sie unten zwei Möglichkeiten, wie Sie dies tun können.
Im ersten Beispiel verwende ich die sp_linkedservers
systemgespeicherte Prozedur, um die Verbindungsserver zurückzugeben. Im zweiten Beispiel verwende ich die sys.servers
Systemkatalogansicht.
Beispiel 1 – Die sp_linkedservers
Gespeicherte Prozedur
Die sp_linkedservers
Die gespeicherte Systemprozedur ist speziell dafür ausgelegt, eine Liste von Verbindungsservern zurückzugeben, die auf dem lokalen Server definiert sind.
Um es auszuführen, tun Sie dies:
EXEC sp_linkedservers;
Ergebnis:
+--------------+--------------------+---------------+------------------+----------------------+----------------+-----------+ | 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 diesem Fall bekomme ich zwei Zeilen. Eigentlich ist die erste Zeile mein lokaler Server. Der lokale Server hat einen Verbindungsserver namens „Homer“, der in der zweiten Zeile angezeigt wird.
Beispiel 2 – Die sys.servers
Systemansicht
Die sys.servers
Die Systemkatalogansicht enthält eine Zeile pro registriertem verknüpftem oder entferntem Server und eine Zeile für den lokalen Server, der eine
server_id
hat von 0
.
Diese Ansicht gibt ziemlich viele Spalten zurück, daher verwende ich die vertikale Ausgabe, um die Ergebnisse in diesem Beispiel anzuzeigen.
Beispiel:
SELECT * FROM sys.servers;
Ergebnis (bei vertikaler Ausgabe):
-[ 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
Mit der Ansicht erhalten Sie viel mehr Informationen.
Natürlich können Sie auch nur die Spalten angeben, die Sie interessieren.
Zum Beispiel:
SELECT name, provider, data_source FROM sys.servers;
Ergebnis:
+--------------+------------+-----------------+ | name | provider | data_source | |--------------+------------+-----------------| | c1b060f68fcb | SQLNCLI | c1b060f68fcb | | Homer | SQLNCLI | 172.17.0.2,1433 | +--------------+------------+-----------------+
Und wenn Sie nicht möchten, dass der lokale Server zurückgegeben wird, können Sie WHERE is_linked = 1
hinzufügen zu Ihrer Anfrage:
SELECT name, provider, data_source FROM sys.servers WHERE is_linked = 1;
Ergebnis:
+--------+------------+-----------------+ | name | provider | data_source | |--------+------------+-----------------| | Homer | SQLNCLI | 172.17.0.2,1433 | +--------+------------+-----------------+