2

ストアド プロシージャ内で (リンク サーバーからデータを取得するための) OPENQUERY の使用に問題があります。私はSQL変数を読んでいますが、うまくいかないようです.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

理論的には、これは機能するはずですか?

4

2 に答える 2

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 = '''+@myName +'''
)'


exec (@sqltext)

LINKED_SERVER.DATABASE.SCHEMA.TABLE を使用する場合、このクエリではインデックスが使用されないため、テーブル サイズなどによってはパフォーマンスの問題が発生する可能性があります。

于 2012-06-01T21:29:47.277 に答える
0

スクリプトを使用してリンク サーバーを追加するだけです。

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

リンク サーバーが TEST-SQL で、データベースが test01 で、テーブル名が testtb の場合

と....

別のサーバーからクエリを実行すると、次のようになります。

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

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

于 2012-05-10T10:15:30.927 に答える