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は大丈夫です。そのクエリの実行は通常完全に機能します(明らかに、dbとtableの名前を削除しました)。何が悪いのか完全にはわかりません。私が得るエラーは次のとおりです。

メッセージ7202、レベル11、状態2、行1sys.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

server.db.table@nodesがこの名前のサーバーを探していることを定義する3ドット表記を使用しています...このサーバー名を動的に探していますか..最良の方法は、リンクされたサーバーオブジェクトまたはエイリアスを作成して参照することです。これはすなわち

MyServer = dev-sql-server.AdventureWorks etc 

または、余分な[@node]を取り除く必要があるかもしれません。

于 2011-12-24T20:40:44.910 に答える