我正在尝试使用表值函数 (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'”。
您不能在表值函数中使用
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
)