2012-04-19 43 views
0

你能否建議我改進下面的Queru Please。SQL用戶定義的函數與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 2012-04-19 16:25:14

+0

有沒有爲每個類別設置這樣的數字下的一些邏輯?也許你可以通過按位和'或'來應用一些掩碼來測試一個值,或者所有的數字都是幻數? – sll 2012-04-19 16:25:43

+0

也許你還沒見過[codereview.se]呢。與Stack Overflow相比,它通常是更適合代碼優化問題的地方。 – 2012-04-20 11:32:30

回答

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 
...