SQL Server CASE语句在用户定义函数中出现错误 [英] Sql Server Case Statement gives me errors in user-defined function

查看:41
本文介绍了SQL Server CASE语句在用户定义函数中出现错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在我的用户定义函数中使用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

这篇关于SQL Server CASE语句在用户定义函数中出现错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆