Ако установите, че трябва да използвате Transact-SQL, за да получите списък на всички свързани сървъри в SQL Server, по-долу са два начина, по които можете да направите това.
В първия пример използвам sp_linkedservers
системна съхранена процедура за връщане на свързаните сървъри. Във втория пример използвам sys.servers
изглед на системния каталог.
Пример 1 – sp_linkedservers
Съхранена процедура
sp_linkedservers
системната съхранена процедура е проектирана специално за връщане на списък от свързани сървъри, дефинирани в локалния сървър.
За да го изпълните, направете следното:
EXEC sp_linkedservers;
Резултат:
+--------------+--------------------+---------------+------------------+----------------------+----------------+-----------+ | 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 | +--------------+--------------------+---------------+------------------+----------------------+----------------+-----------+
В този случай получавам два реда. Всъщност първият ред е моят локален сървър. Локалният сървър има свързан сървър, наречен „Homer“, и той се показва на втория ред.
Пример 2 – sys.servers
Системен изглед
sys.servers
изгледът на системния каталог съдържа ред за регистриран свързан или отдалечен сървър и ред за локалния сървър, който има
server_id
от 0
.
Този изглед връща доста колони, така че ще използвам вертикален изход, за да покажа резултатите в този пример.
Пример:
SELECT * FROM sys.servers;
Резултат (с помощта на вертикален изход):
-[ 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
Получавате много повече информация с изгледа.
Разбира се, можете също да посочите само онези колони, които ви интересуват.
Например:
SELECT name, provider, data_source FROM sys.servers;
Резултат:
+--------------+------------+-----------------+ | name | provider | data_source | |--------------+------------+-----------------| | c1b060f68fcb | SQLNCLI | c1b060f68fcb | | Homer | SQLNCLI | 172.17.0.2,1433 | +--------------+------------+-----------------+
И ако не искате локалния сървър да бъде върнат, можете да добавите WHERE is_linked = 1
към вашата заявка:
SELECT name, provider, data_source FROM sys.servers WHERE is_linked = 1;
Резултат:
+--------+------------+-----------------+ | name | provider | data_source | |--------+------------+-----------------| | Homer | SQLNCLI | 172.17.0.2,1433 | +--------+------------+-----------------+