我想在我的用户定义函数中使用 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
但是使用 CASE 的原始样式...WHEN THEN BLOCK 我收到一条错误消息。
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 部分,我收到 Incorrect Syntax near case 和不正确的语法错误。
我已经正确地对所有内容进行了批处理,因为我的最后一个 CREATE FUNCTION 块以 GO 结尾,并且根据 CASE 上的文档,我有正确的语法。
我正在构建一个更大的标量函数,它将使用其他标量函数在我们的系统中生成与其他参数相对应的生产编码。最好能够使用 CASE,因为生产编码取决于产品和客户。
在我的 Create Function 行的第二个示例中,我还收到一个额外的错误,上面写着“不正确的语法:'Create Function' 必须是批处理中的唯一语句”,但是其他所有内容都相同,我没有得到那个错误IF。
我做错了什么,还是只允许在 SQL 查询中使用 CASES 而不是标量函数?错误消息来自 SQL Server Management Studio 的 squiggle 错误消息系统。