SQL Server 2012 で、入力パラメーターに基づいて別のテーブル値関数を呼び出すテーブル値関数を作成しようとしています。例を次に示します。
CREATE FUNCTION [dbo].[fnMyLastFilterFunction]
(
@Param1 VARCHAR(64),
@Param2 VARCHAR(64),
@Param3 INT,
@StartDate DATETIME,
@EndDate DATETIME
)
RETURNS TABLE
AS
RETURN
(
IF (@Param3 = 0)
BEGIN
SELECT t1.Col1, t1.Col2, t1.Col3, t1.Col4
FROM fnMyFirstFilterFunction(@Param1,@Param2) t1
WHERE t1.DateTimeEnd BETWEEN @StartDate AND @EndDate
END
)
これを実行すると、次の 2 つのエラーが発生します。
- キーワード「IF」付近の構文が正しくありません
- ')' 付近の構文が正しくありません (つまり、最後の閉じ括弧)
テーブル値関数でそのような条件を使用することは可能ですか? 基本的に、「 fnMyFirstFilterFunction 」のすべてのデータから始まるフィルター システムを実装しようとしています。したがって、「fnMyLastFilterFunction」はそのデータを取得し、@start および @end の日付でフィルター処理します。ストアド関数を使用してフィルター ステージを分離しています。私の SQL はさびているので、これを行うためのより良い方法があれば、私はアイデアを受け入れます。
アップデート:
SpectralGhost の提案はうまくコンパイルされましたが、関数本体で @Param3 の値に基づいてさまざまな関数を呼び出すロジックが必要な場合はどうでしょうか? 次のような:
IF (@Param3 = 0)
BEGIN
SELECT t1.Col1, t1.Col2, t1.Col3, t1.Col4
FROM fnMyFirstFilterFunction(@Param1,@Param2) t1
WHERE t1.DateTimeEnd BETWEEN @StartDate AND @EndDate
END
ELSE IF (@Param3 = 1)
BEGIN
SELECT t1.Col1, t1.Col2, t1.Col3, t1.Col4
FROM fnOtherFilterFunction(@Param1,@Param2) t1
WHERE t1.DateTimeEnd BETWEEN @StartDate AND @EndDate
END