2012-04-19 3 views
0

Вы можете предложить мне улучшить ниже Queru Please.SQL User Defined Function С CASE- Пожалуйста, уточните его

ALTER FUNCTION GetTemplate_Lookup_id(@pid int) 
    RETURNS INT 
    AS 
    BEGIN 
    DECLARE @Return int 
    SELECT @Return= CASE @pid 
    -- SOME OTHER Comment 
    WHEN 208 THEN 4 
    WHEN 283 THEN 4 
    WHEN 402 THEN 4 
    WHEN 42 THEN 4 

    --SOME OTHER Comment 
    WHEN 211 THEN 3 
    WHEN 286 THEN 3 
    WHEN 399 THEN 3 
    WHEN 45 THEN 3 

    --SOME OTHER Comment 
    WHEN 209 THEN 1 
    WHEN 284 THEN 1 
    WHEN 397 THEN 1 
    WHEN 43 THEN 1 

    --SOME Other Comment 
    WHEN 210 THEN 2 
    WHEN 285 THEN 2 
    WHEN 398 THEN 2 
    WHEN 44 THEN 2 

    ELSE 0 
    END 
    RETURN @Return 
    END 
+0

Вы испытываете проблемы с производительностью? какая у вас проблема? – Ulises

+0

Есть ли какая-то логика при таких числах, установленных для каждой категории? Возможно, вы можете проверить значение, применив некоторую маску поразрядным 'AND', или все числа являются магическими числами? – sll

+0

Возможно, вы еще не встретили [codereview.se]. Это часто более подходящее место для вопросов об уточнении кода, чем Stack Overflow. –

ответ

5
CASE  
    WHEN @pid in (208, 283, 402, 42) 
     THEN 4  
    WHEN @pid in (211, 286, 399, 45) 
     THEN 3  
    WHEN @pid in (209, 284, 397, 43) 
     THEN 1   
    WHEN @pid in (210, 285, 398, 44) 
     THEN 2  
    ELSE 0  
END 
2

Не можете использовать IN, чтобы убрать вещи?

... 
SELECT @Return= CASE 
WHEN @pid IN (208, 283, 402, 42) THEN 4 
WHEN @pid IN (211, 286, 399, 45) THEN 3 
... 
Смежные вопросы