一尘不染

在FROM语句中使用变量

sql

我正在尝试创建一个查询,该查询将针对中的每个服务器中特定数据库中的特定表执行一次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

然而,@servername@servername.DATABASE.DBO.TABLE似乎并不工作。

有什么建议吗?感谢您与我一起思考。


阅读 177

收藏
2021-03-08

共1个答案

一尘不染

您必须使用动态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的更多信息。

2021-03-08