2012-04-13 9 views
8

के साथ CASE का उपयोग कर सकते हैं मैं उपयोगकर्ता इनपुट के आधार पर निष्पादित करने के लिए एक संग्रहित प्रो का चयन करना चाहता हूं। की तरह कुछ -हम EXEC

EXEC 
CASE @InputParam 
    WHEN 'XML' THEN GetXMLData @ID, 'y' 
    WHEN 'TABLE' THEN GetTableData @ID, 'y' 
END 

इस CASE साथ किया जा सकता है या मैं If निर्माण का उपयोग कर विचार करना चाहिए? इस परिदृश्य मुझे लगता है कि भले ही एसक्यूएल सर्वर की अनुमति दी है कि, एक अगर और अधिक स्पष्ट हो जाएगा में

IF @InputParam = 'XML' 
BEGIN 
    EXEC GetXMLData @ID, 'y' 
END 

IF @InputParam = 'TABLE' 
BEGIN 
    EXEC GetTableData @ID, 'y' 
END 
+2

'CASE' है एक क्वेरी के भीतर इनलाइन मूल्यांकन के लिए प्रयोग किया जाता है। आप 'IF' चाहते हैं क्योंकि यह प्रवाह नियंत्रण निर्माण है। – JNK

उत्तर

8

आप IF निर्माण यहाँ का उपयोग करना चाहते:

IF @InputParam = 'XML' 
    EXEC GetXMLData @ID, 'y' 
IF @InputParam = 'TABLE' 
    EXEC GetTableData @ID, 'y' 
1

आप इस तरह कर सकते हैं।

IF @InputParam = 'XML' 
BEGIN 
    exec GetXMLData @ID, 'y' 
END 
ELSE IF @InputParam = 'TABLE' 
BEGIN 
    exec GetTableData @ID, 'y' 
END 
+0

मुझे लगता है कि आप 'केस' के बजाय 'IF' का उपयोग करना चाहते हैं ... यह अमान्य वाक्यविन्यास है। – JNK

+0

हां @ जेएनके सही है, मैंने पहले उपर्युक्त कोड की कोशिश की थी, और यह काम नहीं किया था। – neuDev33

+0

@ neuDev33 ठीक है, तो आप 'IF' का उपयोग कर सकते हैं। मैं Sybase-ASE वाक्यविन्यास का उपयोग कर रहा था: पी –

0

आप मामले इस्तेमाल कर सकते हैं, लेकिन आप EXEC (cmd) का उपयोग करना होगा:

DECLARE 
@cmd VARCHAR(200) 
, @InputParam VARCHAR(5) ='TABLE' 
, @ID INT =1 

SELECT @cmd = (CASE @InputParam 
WHEN 'XML' THEN 'GetXMLData ' 
     +CONVERT(VARCHAR,@ID)+', '+CHAR(39)+'y'+CHAR(39) 
WHEN 'TABLE' THEN 'GetTableData ' 
     +CONVERT(VARCHAR,@ID)+', '+CHAR(39)+'y'+CHAR(39) 
END) 
EXEC(@cmd)