Nếu bạn thấy mình cần sử dụng Transact-SQL để nhận danh sách tất cả các máy chủ được liên kết trong SQL Server, thì dưới đây là hai cách bạn có thể thực hiện để thực hiện việc này.
Trong ví dụ đầu tiên, tôi sử dụng sp_linkedservers
hệ thống lưu trữ thủ tục để trả lại các máy chủ được liên kết. Trong ví dụ thứ hai, tôi sử dụng sys.servers
chế độ xem danh mục hệ thống.
Ví dụ 1 - sp_linkedservers
Thủ tục được lưu trữ
sp_linkedservers
quy trình lưu trữ hệ thống được thiết kế đặc biệt để trả về danh sách các máy chủ được liên kết được xác định trong máy chủ cục bộ.
Để thực thi nó, hãy làm như sau:
EXEC sp_linkedservers;
Kết quả:
+--------------+--------------------+---------------+------------------+----------------------+----------------+-----------+ | 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 | +--------------+--------------------+---------------+------------------+----------------------+----------------+-----------+
Trong trường hợp này, tôi nhận được hai hàng. Trên thực tế, hàng đầu tiên là máy chủ cục bộ của tôi. Máy chủ cục bộ có một máy chủ được liên kết gọi là “Homer” và được hiển thị ở hàng thứ hai.
Ví dụ 2 - sys.servers
Chế độ xem hệ thống
sys.servers
chế độ xem danh mục hệ thống chứa một hàng cho mỗi máy chủ được liên kết hoặc từ xa đã đăng ký và một hàng cho máy chủ cục bộ có
server_id
trong tổng số 0
.
Chế độ xem này trả về khá nhiều cột, vì vậy tôi sẽ sử dụng đầu ra theo chiều dọc để hiển thị kết quả trong ví dụ này.
Ví dụ:
SELECT * FROM sys.servers;
Kết quả (sử dụng đầu ra dọc):
-[ 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
Bạn nhận được nhiều thông tin hơn với chế độ xem.
Tất nhiên, bạn cũng có thể chỉ định những cột mà bạn quan tâm.
Ví dụ:
SELECT name, provider, data_source FROM sys.servers;
Kết quả:
+--------------+------------+-----------------+ | name | provider | data_source | |--------------+------------+-----------------| | c1b060f68fcb | SQLNCLI | c1b060f68fcb | | Homer | SQLNCLI | 172.17.0.2,1433 | +--------------+------------+-----------------+
Và nếu bạn không muốn máy chủ cục bộ trả về, bạn có thể thêm WHERE is_linked = 1
cho truy vấn của bạn:
SELECT name, provider, data_source FROM sys.servers WHERE is_linked = 1;
Kết quả:
+--------+------------+-----------------+ | name | provider | data_source | |--------+------------+-----------------| | Homer | SQLNCLI | 172.17.0.2,1433 | +--------+------------+-----------------+