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)
答案 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]。