2012-06-27 10 views
10

में स्विच का उपयोग कैसे करें मैं अपनी संग्रहीत प्रक्रिया में CASE का उपयोग करना चाहता हूं। मैं अपने कोड में कुछ सिंटेक्स त्रुटि हो रही है:एसक्यूएल सर्वर

select 
    case @Temp 
    when 1 then (@[email protected]+1) 
    when 2 then (@[email protected]+1) 
    end 

जब चल रहा है, मैं हो रही है:

गलत वाक्यविन्यास के पास '='।

@selectoneCount = @selectoneCount + 1 
बराबर के पास

:

इस लाइन यहाँ पर

दरअसल मुझे एक अन्य एसपी से @temp में वापसी मूल्य मिल रहा है और फिर यह @temp = 1 है तो मैं @ सेलेक्टोनकाउंट 1 की गिनती करना चाहता हूं और इसी तरह। कृपया मुझे बताएं कि सही वाक्यविन्यास क्या है।

+2

'CASE' एक * अभिव्यक्ति * कि एक रिटर्न है * मूल्य *। मुझे नहीं पता कि आप यहां क्या करने की कोशिश कर रहे हैं - शायद हमें समग्र लक्ष्य बताएं, और फिर उपरोक्त कोड को संदर्भ सेट करने के लिए बड़े नमूने के अंदर रखें? –

+0

यह उत्तर उपयोगी है यदि आप वास्तव में एक अभिव्यक्ति का चयन करने के बजाय तार्किक प्रवाह करना चाहते हैं http://stackoverflow.com/a/14760234/74585 –

उत्तर

29

CASEपर केवल "स्विच" है, एक मान - एक संपूर्ण कोड ब्लॉक निष्पादित करने के लिए नहीं।

आप कुछ इस तरह करने के लिए अपने कोड को बदलने की जरूरत:

SELECT 
    @selectoneCount = CASE @Temp 
         WHEN 1 THEN @selectoneCount + 1 
         WHEN 2 THEN @selectoneCount + 1 
        END 

हैं @temp उन मूल्यों से कोई भी के लिए सेट है (1 या 2), तो आप वापस मिल जाएगा एक NULL

+0

आपके उत्तर के लिए तनक्स, मैंने सोचा कि sqlserver में 'केस' एक ही स्विच- सी # $ ( –

+0

का उपयोग 'ईएलएसई @ selectoneCount' * का उपयोग करें * यदि * आप एक डिफ़ॉल्ट केस बनाना चाहते हैं, तो @Temp 1 या 2 नहीं है और @selectoneCount नहीं बदलता है। – woodvi

3

यह एक चुनिंदा कथन है, इसलिए मामले की प्रत्येक शाखा को कुछ वापस करना होगा। यदि आप क्रियाएं करना चाहते हैं, तो बस एक if का उपयोग करें।

2
select 
     @selectoneCount = case @Temp 
     when 1 then (@selectoneCount+1) 
     when 2 then (@selectoneCount+1) 
     end 

    select @selectoneCount 
1

असल में मुझे किसी अन्य स्पैम से @temp में वापसी मूल्य मिल रहा है और फिर यह @temp = 1 है तो मैं @ सेलेक्टोनकाउंट 1 की गिनती करना चाहता हूं और इसी तरह। कृपया मुझे बताएं कि सही वाक्यविन्यास क्या है।

क्या बुराई है:

IF @Temp = 1 --Or @Temp = 2 also? 
BEGIN 
    SET @SelectoneCount = @SelectoneCount + 1 
END 

(हालांकि इस प्रक्रियात्मक कोड जा रहा है की भाप है - आम तौर पर नहीं सबसे अच्छा तरीका एसक्यूएल उपयोग करने के लिए)

+1

अगर कुछ भी गलत है लेकिन मेरे पास 15-20 है हालात इसलिए मैं वहां स्विच का उपयोग करना चाहता था –

+1

@ रामसिंह - एसक्यूएल भाषा में कोई स्विच * कथन * नहीं है। जैसा कि अन्य ने संकेत दिया है, आप 'केस' * अभिव्यक्ति * का उपयोग कर सकते हैं, लेकिन इसे स्केलर मान की गणना और वापसी करना है। –

+1

ठीक है धन्यवाद, इसका मतलब है कि मुझे अपनी स्थिति के लिए और यदि उपयोग करना है। –

संबंधित मुद्दे