Я хочу использовать оператор 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 ... КОГДА БЛОК я получаю сообщение об ошибке.
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
Я получаю сообщение об ошибке "Неверный синтаксис рядом с регистром" и неправильный синтаксис "когда", когда мои части когда.
Я правильно сгруппировал все, потому что мой последний блок CREATE FUNCTION заканчивается GO, и в соответствии с документацией по CASE у меня правильный синтаксис.
У меня есть большая скалярная функция, которую я создаю, которая будет использовать другие скалярные функции для генерации производственного кода в нашей системе, соответствующего другим параметрам. Лучше всего использовать CASE, потому что производственное кодирование зависит от продукта и клиента.
Я также получаю дополнительную ошибку во втором примере в строке «Создать функцию», которая гласит: «Неверный синтаксис:« Создать функцию »должен быть единственным оператором в пакете», но со всем остальным идентичным я не получаю это » ошибка с IF.
Что я делаю не так, или CASES допускается только в SQL-запросах, а не в скалярных функциях? Сообщения об ошибках поступают из системы сообщений об ошибках в SQL Server Management Studio.