我正在尝试创建一个查询,该查询将针对中的每个服务器中特定数据库中的特定表执行一次sys.server。
sys.server
对于每个server.database.dbo.table我想知道的内容。
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似乎并不工作。
@servername
@servername.DATABASE.DBO.TABLE
有什么建议吗?感谢您与我一起思考。
您必须使用动态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的更多信息。