在表值函数中使用 case 或 if 来根据 SQL Server 中传入的值运行查询

问题描述 投票:0回答:1

我正在尝试使用表值函数 (TVF) 根据传入的值执行 2 个查询之一。如果传入的值为 NULL,我想返回所有行。如果指定了值,我只需要参数等于指定值的那些行。

CREATE FUNCTION [dbo].[search_test]
    (@param int)
RETURNS TABLE 
AS
    RETURN
        IF (@param = NULL)
            SELECT TOP 500 recordID 
            FROM jct_RecordParameter 
            ORDER BY recordID

        IF (@param >= 0)
            SELECT TOP 500 recordID 
            FROM jct_RecordParameter 
            WHERE parameterID = @param 
            ORDER BY recordID
END

我收到错误:

关键字“if”附近的语法不正确

当我用“BEGIN”替换“RETURN”时,语法错误转移到“near 'BEGIN'”。

sql sql-server sql-server-2019
1个回答
0
投票

您不能在表值函数中使用

IF
语句。但您可以使用
OR
条件:

CREATE FUNCTION [dbo].[search_test] (@param int)
RETURNS TABLE
AS
RETURN (
    SELECT TOP 500 recordID
    FROM jct_RecordParameter
    WHERE (@param IS NULL) OR (parameterID = @param)
    ORDER BY recordID
)
© www.soinside.com 2019 - 2024. All rights reserved.