2015-10-16 69 views
1

我在存儲過程中寫一個非常基本的SQL語句CASE 1,700行的變量:即存儲過程中的SQL Case語句是否存在長度限制?

CASE Color 
    WHEN '1' THEN 'Blue' 
    WHEN '2' THEN 'Red' 
    ..... 
    WHEN '1700' THEN 'Violet' 
    ELSE Color 
END as 'color' 

有沒有辦法,我超過最大長度是多少?存儲過程的構建,但是當我從網站調用它時,我得到一個運行時錯誤(當我只有1300它工作正常)。

感謝您的幫助!

+1

我投了贊成把這個問題轉移到dba。除此之外,如果你有1700行的case語句,就像上面一樣,你錯過了一個查找表,它可以完全避免這個問題,只需簡單的連接... – Paolo

+2

更好的選擇是將這些代碼添加到「Colors」表和做一個'JOIN'而不是那個巨大的'CASE'表達式。 @Paolo我不認爲這是一個很好的DBA – Lamak

+0

是的,你應該創建一個表並加入表。這將給你規範化的數據,假設你使這個SP或函數將是非常有問題的將來處理 – wiretext

回答

0

CASE表達式的唯一限制我知道的是,您不能將它們嵌套超過10個深度,這與您正在做的事情無關。存儲過程的長度限制爲250MB或批量大小,以較小者爲準,但相當肯定會阻止您首先構建過程,並且不太可能達到此限制。

也許別人可以識別這個失敗的技術原因,但有一點是明確的,你應該使用一個包含所有對數字和顏色的查找表,所以你可以JOIN,是這樣的:

SELECT COALESCE(b.Color_Name,a.Color) 
FROM YourTable a 
LEFT JOIN lkp_Colors b 
    ON a.Color = b.Color_ID