Синтаксическая проблема с выражением регистра внутри скалярной функции - PullRequest
0 голосов
/ 23 сентября 2011

Не удается создать скалярную функцию в MS SQL 2005. Будем благодарны за любые предложения.Поле title1_type должно быть установлено в соответствии с оператором case.Передается sku, который должен определять базу типов в выражении case.

create FUNCTION [dbo].[gettitle1_type] (@sku varchar(50))  
RETURNS varchar(50) AS  
BEGIN 
    DECLARE @title1_type varchar(50)
    DECLARE @title1 varchar(50)
    select @title1_type = case @title1
        when @title1 like '%SMALL%' then 'size'
        when @title1 like '%large%' then 'size'
        when @title1  like '%pink%' then 'color'
        when @title1  like '%red%' then 'color'
        when @title1  like '%brunette%' then 'color'
        else ''
    END;
    where sku = @sku

    RETURN isnull(@title1_type,'')

1 Ответ

3 голосов
/ 23 сентября 2011

Вам нужно

  1. Избавиться от точки с запятой после END; Это не конец утверждения. При желании вы можете поставить один после where sku = @sku.
  2. Не используйте case @title1, используйте Case. Вы смешиваете 2 формы CASE выражения .
  3. Добавьте окончательный END, чтобы завершить определение функции.
  4. Либо удалите WHERE, либо добавьте FROM
  5. (Необязательно и зависит от 4) Лучше всего ставить WITH SCHEMABINDING на скалярные UDF, которые не осуществляют доступ к данным. Это может помочь производительности в некоторых случаях.

Предоставление ниже

CREATE FUNCTION [dbo].[gettitle1_type] (@sku VARCHAR(50))  
RETURNS VARCHAR(50) 
WITH SCHEMABINDING
AS  
BEGIN 
    DECLARE @title1_type VARCHAR(50)
    DECLARE @title1 VARCHAR(50) /*This is never assigned to ?!*/

    SELECT @title1_type = CASE 
        WHEN @title1 LIKE '%SMALL%' THEN 'size'
        WHEN @title1 LIKE '%large%' THEN 'size'
        WHEN @title1  LIKE '%pink%' THEN 'color'
        WHEN @title1  LIKE '%red%' THEN 'color'
        WHEN @title1  LIKE '%brunette%' THEN 'color'
        ELSE ''
    END
    /*
    FROM xyz
    WHERE sku = @sku;*/

    RETURN ISNULL(@title1_type,'')
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...