T-SQL使用链接服务器查询结果来填充本地表

时间:2012-02-28 21:31:54

标签: sql

您好我正在尝试如何实现这一目标。我有一个表T1,其中一列名为'Servers',其中包含一个链接服务器名称的完整列表。我想查询每个链接服务器上的一些表,并使用结果填充此表的其他列,例如DB_Nmaes。

理想的结果表就像这样

T1

Servers  DB_Names    Datafile_Size, …. 
S1 D1 2M S1 D2 3M S1 D3 5M S2 D1 3M S2 D2 6M . . .

我能想到的一种方法是遍历整个表T1并在每个循环中构造一个动态SQL来查询相应的链接服务器并插入其他字段DB_Names和Datafile_size。 但我试图避免这样做,因为我在该列中有许多链接的服务器行。我们有什么办法可以通过使用基于集合的操作来实现这一目标吗?

感谢。

2 个答案:

答案 0 :(得分:0)

由于您需要远程服务器上的所有数据库,我会考虑更改为2表方法。您的第一个表将是一个包含您要查询的所有链接服务器的表。然后,您需要遍历一个游标,该游标将制定动态SQL语句,以便跨链接服务器进行调用。

答案 1 :(得分:0)

我还建议将结果存储在单独的表中。然后你可以用这种方式接近它:

CREATE TABLE ServerDbs (LinkedServer VARCHAR(100), DbName VARCHAR(100))

DECLARE @q VARCHAR(MAX)
SET @q = 
    (SELECT 'INSERT INTO ServerDbs SELECT ''' + T.Server + ''', name FROM ' + T.Server + '.master.sys.databases'
    FROM T
    FOR XML PATH(''))

EXEC (@q)