带有动态LinkedServer的SQL SERVER查询游标

问题描述 投票:0回答:1

我想监视几个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
sql-server linked-server
1个回答
0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.