如何查询多个链接服务器?

cez*_*ann 4 sql linked-server sql-server-2008 multiserver

链接一些 SQL Server 2008 服务器/实例后,我想对这些服务器进行更通用的查询。我知道我必须像这样指定查询的命运:

select * 
from [SRV\INSTANCE].dbname.dbo.foo
Run Code Online (Sandbox Code Playgroud)

但是,我会针对多个链接服务器运行此查询。我也知道这个 select 语句返回的正是SRV\INSTANCE我需要的:

select ss.name 
from sys.servers ss 
where ss.server_id > 0
Run Code Online (Sandbox Code Playgroud)

这个,servers\instances从我想要查询的地方返回所有内容。

在这种情况下,所有数据库都具有相同的结构,所以我想做这样的事情:

select * 
from [select ss.name from sys.servers ss where ss.server_id > 0].DBNAME.dbo.foo
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

提前致谢。

Ale*_*nko 6

您可以动态地动态创建 SQL 语句,然后运行该命令。在带有 help += 运算符的 @dml 变量中的这种情况下,动态创建了整个命令

DECLARE @dml nvarchar(max) = N''
SELECT @dml += 'UNION ALL SELECT * FROM ' + QUOTENAME(ss.name) + 
               '.[DBNAME].[dbo].foo ' 
FROM sys.servers ss
WHERE ss.server_id > 0

SELECT @dml = STUFF(@dml, 1, 10, '')
EXEC sp_executesql @dml
Run Code Online (Sandbox Code Playgroud)