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
。