2011-11-21 2 views
8

私は位置パラメータでインラインTVFを呼び出してみました、それが正常に動作します:名前付きパラメータを使用してインラインTVFを呼び出す場合、適切な構文は何ですか?

SELECT MyTable.Col1, 
     (SELECT TvfColumn FROM ufnGetData(MyTable.Col1, MyTable.Col2)), 
     MyTable.Col2 
FROM MyTable 

は、それから私は、TVFのパラメーターに名前を付けることを試み、それが解析されません。

SELECT MyTable.Col1, 
     (SELECT TvfColumn FROM ufnGetData(@Param1=MyTable.Col1, @Param2=MyTable.Col2)), 
     MyTable.Col2 
FROM MyTable 

機能

のようなエラー与える
CREATE FUNCTION dbo.ufnGetData 
( 
    @Param1 INT, 
    @Param2 INT 
) 
RETURNS TABLE 
AS 
RETURN 
(
SELECT 
     blah blah blah AS TvfColumn 
) 
GO 

をようになります0

メッセージ137、レベル15、状態2、行23スカラー変数 "@ Param2"を宣言する必要があります。

Msg 102、レベル15、状態1、行24 '、'の近くの構文が正しくありません。

私は間違っていますか?

答えて

7

テーブル値のユーザー定義関数をストアドプロシージャのように扱うことはできません。呼び出す際に名前付きパラメータを使用するのではなく、位置ベースです。つまり、あなたがしようとしていることは不可能です。

名前付きパラメータを使用する理由はありますか?すべてのパラメーターを定義する必要があるため、通常はストアード・プロシージャーには実際のメリットはありません。

+7

実際のメリットは、発信者に影響を与えることなく、TVFでパラメータの順序を変更できることです。また、名前が付いている場合はパラメータが何であるかを見るのが簡単ですが、インラインコメントを置いて同様の効果を得ることができます。 –

+0

@MichaelGoldshteyn申し訳ありませんが、SQL Serverでは不可能です。 –

+4

RE: "または任意の関数"。本当じゃない。スカラーUDFは 'EXEC'で呼び出すことができ、その場合は名前付きパラメーターを受け入れます。 –

関連する問題