SQL Server动态查询 - 无法定位链接服务器

时间:2011-12-24 20:15:27

标签: sql sql-server-2008 dynamicquery

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很好。运行该查询通常可以正常工作(显然我删除了数据库和表名)。不完全确定它有什么问题。我得到的错误是:

  

Msg 7202,Level 11,State 2,Line 1   在sys.servers中找不到服务器'@node'。验证是否指定了正确的服务器名称。如有必要,执行存储过程sp_addlinkedserver以将服务器添加到sys.servers。

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

2 个答案:

答案 0 :(得分:1)

根据我的思考和测试,它只允许在查询部分中的参数,例如在哪里和其他条件。

试试这种方式。

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;

答案 1 :(得分:0)

你正在使用3点符号来定义server.db.table @nodes正在寻找这个名字的服务器......你是在动态地寻找这个服务器名吗?最好的方法是创建一个链接服务器对象或别名,并参考它,即

MyServer = dev-sql-server.AdventureWorks etc 

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