Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

2 Möglichkeiten zum Zurückgeben einer Liste von Verbindungsservern in SQL Server mit T-SQL

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 |
+--------+------------+-----------------+