sql >> Database >  >> RDS >> Sqlserver

2 manieren om een ​​lijst met gekoppelde servers in SQL Server te retourneren met behulp van T-SQL

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

  1. Het verzoek is mislukt of de service heeft niet tijdig gereageerd?

  2. Slechte praktijken bij het ontwerpen van databases

  3. SQL Server 2016:Designer bekijken

  4. Hoe WEIGHT_STRING() werkt in MariaDB