Sql 使用变量查询sys.servers

Sql 使用变量查询sys.servers,sql,sql-server,Sql,Sql Server,我正在从SQLServer2008R2运行此程序 在从sys.servers向查询写入查询时,是否可以使用变量名 DECLARE @hostname varchar(20) SET @hostname = '192.168.110.101' SELECT TOP(10) * FROM [@hostname].databasename.dbo.tablename return“在sys.servers中找不到服务器'@hostname'。请验证指定的服务器名称是否正确。如有必要,请执行存储过程s

我正在从SQLServer2008R2运行此程序

在从sys.servers向查询写入查询时,是否可以使用变量名

DECLARE @hostname varchar(20)
SET @hostname = '192.168.110.101'
SELECT TOP(10) * FROM [@hostname].databasename.dbo.tablename
return“在sys.servers中找不到服务器'@hostname'。请验证指定的服务器名称是否正确。如有必要,请执行存储过程sp_addlinkedserver以将服务器添加到sys.servers。”


它似乎试图直接使用@hostname,而不是实际设置的变量。我也尝试过移除支架,但这也不起作用。有什么想法吗?

您必须执行一些动态sql。您需要使用动态sql。这似乎不起作用。我做错什么了吗?:
code
DECLARE@sql为NVARCHAR(100)
code
SET@sql=N'SELECT*from[@hostname].xstore.dbo.trn_trans'
code
EXEC sp_executesql@stmt=@sql,@params=N'@hostname为varchar(25),@hostname='192.168.1.1'我在下面发布了一个如何在动态sql中执行此操作的示例\n您必须执行一些动态sql。您需要使用动态sql来执行此操作。这似乎不起作用。我做错什么了吗?:
code
DECLARE@sql为NVARCHAR(100)
code
SET@sql=N'SELECT*from[@hostname].xstore.dbo.trn_trans'
code
EXEC sp_executesql@stmt=@sql,@params=N'@hostname为varchar(25)”,@hostname='192.168.1.1',我在下面发布了一个如何在动态sql中执行的示例\感谢您的响应!我得到这个消息:“192.168”附近的Msg 102,15级,状态1,第1行不正确的语法。好的,让我看看。。。很抱歉,我在SET(AT)SQL=SQL之后丢失了(AT)符号谢谢您的回复!我得到这个消息:“192.168”附近的Msg 102,15级,状态1,第1行不正确的语法。好的,让我看看。。。很抱歉,我在SET(AT)SQL=SQL之后缺少了(AT)符号
DECLARE @SQL as varchar(max)
SET @SQL = 'SELECT TOP 10 * FROM '
DECLARE @hostname varchar(20)
SET @hostname = '192.168.110.101'
SET @SQL = SQL + @hostname + '.databasename.dbo.tablename'

EXEC (@SQL)