0
declare @node int = 9044;

DECLARE @sqlCommand NVARCHAR(MAX) = 
(
    'SELECT * FROM [@node].[database_name].dbo.table_name'
);

DECLARE @paramList NVARCHAR(400) =
(
    '@node int'
)

exec sp_executesql @sqlCommand, @paramlist, @node;

所以这是我试图运行的简单查询。9044没问题。运行该查询通常可以完美运行(显然我已经删除了数据库和表名)。不完全确定它有什么问题。我得到的错误是:

消息 7202,级别 11,状态 2,第 1 行在 sys.servers 中找不到服务器“@node”。验证是否指定了正确的服务器名称。如有必要,执行存储过程 sp_addlinkedserver 将服务器添加到 sys.servers。

关于如何解决此问题的任何想法,或者我应该只编写查询并使用EXEC (@sql)

4

2 回答 2

1

根据我的想法和测试,它只允许查询部分中的参数,例如 where 和其他条件。

试试这个方法。

declare @node int = 9044;

DECLARE @sqlCommand NVARCHAR(MAX) = 
(
    'SELECT * FROM [@node].[database_name].dbo.table_name'
);

DECLARE @paramList NVARCHAR(400) =
(
    '@node int'
)


SET @sqlCommand  = REPLACE(@sqlCommand , '@node',@node)
exec sp_executesql @sqlCommand, @paramlist, @node;
于 2011-12-25T03:49:25.333 回答
0

您正在使用定义 @nodes 的 3 点表示法server.db.table正在寻找此名称的服务器...您是否正在动态寻找此服务器名称.. 最好的方法是创建链接服务器对象或别名并引用它这是即

MyServer = dev-sql-server.AdventureWorks etc 

或者您可能只需要摆脱额外的 [@node]。

于 2011-12-24T20:40:44.910 回答