2

我正在尝试创建一个查询,该查询将为sys.server.

对于每个server.database.dbo.table我想知道的内容。

所以我需要的是:

declare @numrows int = (select count(*) from sys.servers)
declare @i int = 1

while @i <= @numrows
BEGIN
declare @servername varchar(max) = (select servernaam from #servers where rij = @i)

select * from @servername.DATABASE.DBO.TABLE

set @i = @i+1

END

但是,@servernamein@servername.DATABASE.DBO.TABLE似乎不起作用。

建议?谢谢你和我一起思考。

4

1 回答 1

7

您必须使用动态 sql:

declare @numrows int = (select count(*) from sys.servers)
declare @i int = 1
declare @Sql(1000)
declare @servername varchar(max)

while @i <= @numrows
BEGIN
select @servername = servernaam 
from #servers where rij = @i

set @Sql = 'select * from '+@servername+'.DATABASE.DBO.TABLE'
exec(@Sql)

set @i = @i+1

END

是有关 exec 的更多信息。

于 2012-09-20T08:42:27.900 回答