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

Sql 如何在标量函数中使用SELECT用例?,sql,tsql,sql-server-2014,Sql,Tsql,Sql Server 2014,这是一个非常基本的标量函数,如果提供的两个数字之和等于10或0,则应返回1 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)

这是一个非常基本的标量函数,如果提供的两个数字之和等于
10
0
,则应返回
1

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”附近的语法不正确

这里有什么不正确的地方?

您需要开始/结束

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
还请注意,由于函数返回位,因此不需要强制转换为位。最后,标量函数的速度非常慢。您可以改用内联函数,它需要额外的努力才能应用,但速度要快好几倍

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

返回位
声明一个多步骤标量函数
as return
表示内联表值函数。挑一个或另一个。如果通过使用
返回表
并为所选列指定名称来选择内联表值,则性能会更好。否则,给函数一个带有
begin…end
的主体,里面有一个
return
。啊,我想知道为什么我在网上看到了
CREATE function
的例子,而没有
begin
end
,我只是认为它是单语句标量函数的缩写。我实际上是想弄清楚为什么在标量函数中使用CTE
时会出现语法错误(即使使用
BEGIN
END
)。这至少消除了似乎是罪魁祸首的
SELECT案例的误导。不确定(10,0)
中的
来自何处,但OP要求您从
issumequaltone
返回案例,当@number1+@number2=10,然后1 else 0结束。正如GSerg和alanburstein所指出的,当函数返回类型声明为
bit
@Habo时,不需要
cast
。我不觉得这是我编造的,但我不确定它是从哪里来的。我认为更重要的是,不需要选择
select