2011-12-24 33 views
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とテーブル名は削除されています)。何が間違っているのか完全にはわからない。私が手にエラーがある:SQL Serverの動的クエリ - リンクされたサーバーを見つけることができません

メッセージ7202、レベル11、状態2、行1 はsys.serversにサーバの@node 'が見つかりませんでした。正しいサーバー名が指定されていることを確認します。必要に応じて、ストアド・プロシージャsp_addlinkedserverを実行してサーバーをsys.serversに追加します。

あなたはserver.db.table @nodesを定義する3ドット表記を使用しているEXEC (@sql)

+0

あなたの動的SQLは失敗していますが、静的SQLの実行は機能していますか?同じサーバー/データベースに対して、同じサーバー/データベースに対して実行しているデータベース/サーバでsp_addlinkedserver '9044'を実行すると、問題が解決されます。 – UnhandledExcepSean

+1

は、9044という名前のリンクサーバーを参照する@Nodeですか? – rene

+1

@ nodeをnvarcharに変換するとどうなりますか? – UnhandledExcepSean

答えて

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; 
+0

私は間違いなくこれを試してみます。ありがとう – Antares

+0

これは動作します!ありがとう – Antares

0

をこの問題を解決するか、私は、クエリを記述する必要があり、使用方法上の任意のアイデアは、この名前のサーバーを探しています。このサーバー名を探して..are動的に...最良の方法は、リンクサーバーオブジェクトまたはエイリアスを作成することと、それを参照してください。これはつまり

MyServer = dev-sql-server.AdventureWorks etc 

たか、あなたは余分を取り除くために必要なだけのことでしょう[@ノード]。

+0

ええ、@nodeはループによって決定されます。 – Antares

関連する問題