首页 > 解决方案 > 如何在标量函数中使用 SELECT CASE?

问题描述

这是一个非常基本的标量函数,1如果提供的 2 个数字的总和等于100不等于,它应该返回。

CREATE FUNCTION IsSumEqualToTen
(
    @number1 INT,
    @number2 INT
)
RETURNS BIT
AS
    RETURN
    (
        SELECT CASE WHEN (@number1 + @number2) = 10
        THEN CAST(1 AS BIT)
        ELSE CAST(0 AS BIT)
        END
    )

但是,我得到一个语法错误!

'RETURN' 附近的语法不正确。

这里有什么不正确的?

标签: sqltsqlsql-server-2014

解决方案


你需要一个开始/结束

CREATE FUNCTION IsSumEqualToTen
(
    @number1 INT,
    @number2 INT
)
RETURNS BIT
AS
BEGIN
    RETURN
    (
        SELECT CASE WHEN (@number1 + @number2) IN (10,0)
        THEN CAST(1 AS BIT)
        ELSE CAST(0 AS BIT)
        END
    )
END
GO

另请注意,您不需要转换为 BIT,因为该函数会返回一点。最后,标量函数像泥土一样缓慢。您可以改用内联函数,这需要一些额外的努力才能应用,但速度会快几倍。

CREATE FUNCTION dbo.IsSumEqualToTen
(
    @number1 INT,
    @number2 INT
)
RETURNS TABLE AS RETURN
SELECT is10 = CASE WHEN (@number1 + @number2) =IN (10,0) THEN CAST(1 AS BIT) ELSE 0 END;
GO

推荐阅读