Se ti accorgi di dover utilizzare Transact-SQL per ottenere un elenco di tutti i server collegati in SQL Server, di seguito sono riportati due modi per farlo.
Nel primo esempio utilizzo sp_linkedservers
stored procedure di sistema per restituire i server collegati. Nel secondo esempio utilizzo sys.servers
vista catalogo di sistema.
Esempio 1:sp_linkedservers
Procedura memorizzata
I sp_linkedservers
la procedura memorizzata di sistema è progettata specificamente per restituire un elenco di server collegati definiti nel server locale.
Per eseguirlo, procedere come segue:
EXEC sp_linkedservers;
Risultato:
+--------------+--------------------+---------------+------------------+----------------------+----------------+-----------+ | 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 questo caso ottengo due righe. In realtà, la prima riga è il mio server locale. Il server locale ha un server collegato chiamato "Homer" e che viene visualizzato nella seconda riga.
Esempio 2:sys.servers
Vista di sistema
I sys.servers
la vista del catalogo di sistema contiene una riga per il server collegato o remoto registrato e una riga per il server locale che ha un
id_server
di 0
.
Questa visualizzazione restituisce alcune colonne, quindi utilizzerò l'output verticale per visualizzare i risultati in questo esempio.
Esempio:
SELECT * FROM sys.servers;
Risultato (usando l'output verticale):
-[ 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
Ottieni molte più informazioni con la vista.
Ovviamente puoi anche specificare solo le colonne che ti interessano.
Ad esempio:
SELECT name, provider, data_source FROM sys.servers;
Risultato:
+--------------+------------+-----------------+ | name | provider | data_source | |--------------+------------+-----------------| | c1b060f68fcb | SQLNCLI | c1b060f68fcb | | Homer | SQLNCLI | 172.17.0.2,1433 | +--------------+------------+-----------------+
E se non vuoi che venga restituito il server locale, puoi aggiungere WHERE is_linked = 1
alla tua richiesta:
SELECT name, provider, data_source FROM sys.servers WHERE is_linked = 1;
Risultato:
+--------+------------+-----------------+ | name | provider | data_source | |--------+------------+-----------------| | Homer | SQLNCLI | 172.17.0.2,1433 | +--------+------------+-----------------+