sql >> Database teknologi >  >> RDS >> Sqlserver

2 måder at returnere en liste over linkede servere i SQL Server ved hjælp af T-SQL

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

  1. Sådan installeres sqlcmd &bcp på SUSE

  2. To kolonner i underforespørgsel i where-klausul

  3. Udfordringer ved at skalere Moodle PostgreSQL-databasen

  4. Brug tekstoutput fra en funktion som ny forespørgsel