如何在标量函数中使用 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
这是一个非常基本的标量函数,如果所提供的 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