2012-05-10 26 views
2

ストアドプロシージャ内でOPENQUERY(リンクサーバーからデータをフェッチする)を使用する際に問題があります。私はSQL変数を読んできましたが、それを働かせるように見えないので、多分私はSQLの変数/文字列を誤解しています。それはエラーを投げている "不正な構文の近くに '+'。私は何が間違っているのか分かりません。OPENQUERY文字列内のストアドプロシージャ/ SQL変数

コード:

ALTER PROCEDURE [dbo].[sp_getPerson] 
@myName nvarchar(MAX) 
AS 
BEGIN 
SET NOCOUNT ON; 

SELECT  * 
    FROM   OPENQUERY(MY_LINKED_SERVER, 'SELECT * FROM myTable 
WHERE (myName= ''' + @myName + ''') 
') AS derivedtbl_1 

END 

万一この作品、理論的には?

答えて

0

あなたがしなければならないすべてはあなたのリンクサーバーは、TEST-SQLとデータベースの場合、スクリプト

http://msdn.microsoft.com/en-us/library/ms189811.aspx sp_addlinkedsrvloginが

スルーリンクサーバーを追加でTEST01とテーブル名はtesttb

でされており、 ....

他のサーバーからの問い合わせは、このようなものです。

select * from [TEST-SQL].test01.dbo.testtb linktedTB where .... 

また、リンクされたサーバーにテーブルを結合することもできます。

+0

素晴らしい!私は文法をちょっと分かりません。リンクされた表には完全な接頭辞も必要でしょうか? など。 SELECT * FROM [LINKED_SERVER] .MYDATABASE.dbo.MYTABLE1 LEFT OUTER JOIN [LINKED_SERVER] .MYDATABASE.dbo.MYTABLE2 ON ... – valoukh

+0

exec sp_addlinkedserver @ server = 'test-sql01'; exec sp_addlinkedsrvlogin @ rmtsrvname = 'テスト-sql01'、@ useself = false、@ rmtuser = 'sa'、@ rmtpassword = 'sapassword'; これはプレフィックス全体を必要としますが、リンクされたサーバテーブルを上に指定したようにエイリアスできます。 – maSTAShuFu

1

私はクエリ全体を変数に入れ、変数を実行します。

declare @myName nvarchar(MAX) 
declare @sqltext varchar(max) 


select @myName = 'Some Name' 

select @sqltext=' 
select * from openquery(MY_LINKED_SERVER,''select * from database.schema.table 
where myName = '''[email protected] +''' 
)' 


exec (@sqltext) 

あなたがLINKED_SERVER.DATABASE.SCHEMA.TABLEを使用している場合は何のインデックスは、このクエリで使用されていないので、あなたはなど、テーブルのサイズに応じてパフォーマンスの問題を持つことができます。