Я хочу использовать оператор case в своих пользовательских функциях, потому что мне нужно сопоставлять несколько терминов. Я мог бы использовать таблицу для совпадений, но тогда я не смог бы установить ее внутри определения вычисляемой колонки.Sql Server Case Statement дает мне ошибки в пользовательской функции
Это работает с 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
Но с оригинальным стилем, используя СЛУЧАЙ ... КОГДА ТО 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
У меня ошибка в неправильном синтаксисе рядом с корпусом и неправильный синтаксис рядом с моими частями.
Я правильно собрал все, потому что мой последний блок CREATE FUNCTION заканчивается GO, и в соответствии с документацией на CASE у меня есть правильный синтаксис.
У меня есть большая скалярная функция, которую я создаю, которая будет использовать другие скалярные функции для генерации производственного кодирования в нашей системе, соответствующей другим параметрам. Было бы лучше иметь возможность использовать CASE, потому что производственное кодирование зависит от продукта и клиента.
Я также получаю дополнительную ошибку во втором примере на моей строке «Создать функцию», в которой говорится: «Неправильный синтаксис:« Создать функцию »должен быть единственным выражением в партии», но со всем остальным идентичным я не получаю эта ошибка с IF.
Что я делаю неправильно или CASES разрешено только в запросах Sql, а не в скалярных функциях? Сообщения об ошибках поступают из системы сообщений об ошибках Sql Server Management Studio.
мс должно быть @ms и код не будет работать в любом случае, потому что все переменные VARCHAR будут недобросовестный VARCHAR (1) – 2008-11-19 18:43:14
Исправленная опечатка NXC с «мс». Спасибо, Кейд. – 2008-11-19 18:55:24