SQL Server CASE语句在用户定义函数中出现错误

2022-03-07 00:00:00 sql sql-server ssms
我想在我的用户定义函数中使用CASE语句,因为我需要匹配许多术语。我可以使用表进行匹配,但这样就不能将其放入计算列定义中。

这适用于IF语句:

CREATE FUNCTION MaraSizeNumber
(
    @ms varchar
)
RETURNS varchar
AS
BEGIN
    IF ms = '16-18' RETURN '1'
    ELSE IF ms = '18-20' RETURN '2'
    ELSE IF ms = '20-22' RETURN '3'
    ELSE IF ms = '22+' RETURN '4'
    ELSE IF ms = '24+' RETURN '5'
    ELSE IF ms = '14-16' RETURN '7'
    ELSE RETURN 'BAD'
END

但对于使用大小写的原始样式.当使用挡路时,我会收到错误消息。

CREATE FUNCTION MaraSizeCaseExample
(
    @ms varchar
)
RETURNS varchar
AS
BEGIN
    CASE ms
        WHEN '16-18' THEN RETURN '1'
        WHEN '18-20' THEN RETURN '2'
        WHEN '20-22' THEN RETURN '3'
        WHEN '22+' THEN RETURN '4'
        WHEN '24+' THEN RETURN '5'
        WHEN '14-16' THEN RETURN '7'
        ELSE RETURN 'BAD'
    END
END 

我收到错误的大小写语法错误和WHEN部分的语法不正确。

我已经正确地对所有内容进行了批处理,因为我上一个创建函数挡路以GO结尾,并且根据案例文档,我拥有正确的语法。

我正在构建一个更大的标量函数,它将使用其他标量函数在我们的系统中生成对应于其他参数的产品编码。最好能够使用案例,因为生产编码取决于产品和客户。

在CREATE Function行的第二个示例中,我还收到一个额外的错误,指出"语法不正确:‘CREATE Function’必须是批处理中的唯一语句",但在其他内容相同的情况下,IFS不会出现该错误。

我做错了什么,还是只允许在SQL查询中使用大小写,而不允许在标量函数中使用大小写?错误消息来自SQL Server Management Studio的摆动错误消息系统。


解决方案

CASE语句应如下所示:

RETURN CASE @ms
       WHEN '16-18' THEN '1'
       WHEN '18-20' THEN '2'
       WHEN '20-22' THEN '3'
       WHEN '22+' THEN '4'
       WHEN '24+' THEN '5'
       WHEN '14-16' THEN '7'
       ELSE 'BAD'
  END

相关文章