我想监视几个SQL SERVER实例(大约31个),并且我想准备一个过程,该过程将基于sys.servers列表聚合来自实例的数据,但是我不能动态地询问服务器。
DECLARE @instance_name sysname;
DECLARE instance_cursor CURSOR FOR
select data_source from sys.servers where is_linked = 1;
OPEN instance_cursor
FETCH NEXT FROM instance_cursor INTO @instance_name
WHILE @@FETCH_STATUS = 0
BEGIN
--Do something on a linked server
SELECT 1 FROM @instance_name.master.sys.master_files
FETCH NEXT FROM instance_cursor INTO @instance_name
END
CLOSE instance_cursor
DEALLOCATE instance_cursor
USE master
GO
IF OBJECT_ID('tempdb..#server_info') IS NOT NULL
DROP TABLE #server_info
CREATE TABLE #server_info
(
Col1 SQL_VARIANT,
Col2 SQL_VARIANT,
Col3 SQL_VARIANT,
Col4 SQL_VARIANT
) -- change data type as needed.
DECLARE @instance_name NVARCHAR(255);
DECLARE @sql NVARCHAR(MAX)
DECLARE instance_cursor CURSOR FOR
SELECT name FROM master.sys.servers WHERE is_linked = 1
ORDER BY name
OPEN instance_cursor
FETCH NEXT FROM instance_cursor INTO @instance_name
WHILE @@FETCH_STATUS = 0
BEGIN
--Do something on a linked server
SET @sql = 'INSERT INTO #server_info (Col1,Col2,Col3,Col4) SELECT .... FROM ' + @instance_name + '.master.sys...'
PRINT @sql -- verify for your syntax
EXEC (@sql)
FETCH NEXT FROM instance_cursor INTO @instance_name
END
CLOSE instance_cursor
DEALLOCATE instance_cursor
SELECT * FROM #server_info