如何在标量函数中使用 SELECT CASE?

How does one use SELECT CASE within a Scalar Function?

这是一个非常基本的标量函数,如果所提供的 2 个数字的总和等于 10,则应 return 1,否则应 0

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
    )

然而,我却收到语法错误!

Incorrect syntax near 'RETURN'.

这里哪里不对?

你需要一个BEGIN/END

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,因为函数 returns 有点。最后,标量函数非常慢。您可以改用内联函数,这需要一些额外的努力才能应用,但速度会快几倍。

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

函数体中不需要 SELECT。你可以简单地写:

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