0

以下のように、OpenQuery でパラメーターを使用する関数を作成しようとしています。

CREATE FUNCTION fnMyFunction (@myVar INT) RETURNS TABLE AS
    DECLARE @Query VARCHAR(2000)
SET @Query = 'SELECT * FROM OPENQUERY(myLinkedServer, ''SELECT num FROM tblMyTable WHERE
myTableNum = '+ @myVar + '  '')'

RETURN EXEC(@Query)

Openquery は単一の整数のみを返す必要があります。私はもう試した

...RETURNS INT AS
...OPENQUERY...
DECLARE @num INT
SET @num = 0
@num = EXEC(@Query)
RETURN @num

and get 戻り値を持つ RETURN ステートメントは、このコンテキストでは使用できません。

4

1 に答える 1

1

openqueryこのタイプの呼び出し ( ) を関数で使用できるとは思いません。

ユーザー定義関数は動的 SQL を許可しないため、動的 SQL と見なされます。

したがって、その値を返すストアド プロシージャを作成することが唯一の選択肢になると思います。または、一時テーブルをインラインで作成し、使用する前にストアド プロシージャで使用します。

これは、UDF のその他の制限に関する記事です。

使用する前に、その呼び出しを行う必要があります。

DECLARE @Query VARCHAR(2000)
DECLARE @myVar INT
SET @myVar = yourValue

SET @Query = 'SELECT * FROM OPENQUERY(myLinkedServer, ''SELECT num FROM tblMyTable WHERE
myTableNum = '+ @myVar + '  '')'

EXEC(@Query)
于 2012-08-16T22:06:04.687 に答える