2012-04-13 5 views
8

Desidero selezionare un processo memorizzato da eseguire in base all'input dell'utente. Qualcosa di simile -è possibile utilizzare CASE con EXEC

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

Può questo essere fatto con CASE o dovrei considerare l'uso del If costrutto?

+2

'CASE' è utilizzato per la valutazione inline all'interno di una query. Vuoi 'SE' dal momento che si tratta di un costrutto di controllo del flusso. – JNK

risposta

8

si desidera utilizzare il IF costrutto qui:

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

Si può fare in questo modo:

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

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

Penso che tu voglia usare 'IF' invece di' CASE' qui ... Questa è una sintassi non valida. – JNK

+0

Sì, @JNK ha ragione, ho provato prima il codice precedente e non ha funzionato. – neuDev33

+0

@ neuDev33 ok, puoi usare 'IF' allora. Stavo usando la sintassi Sybase-ASE: P –

2

In questo scenario penso che, anche se SQL Server ha permesso che, un IF sarebbe più chiaro.

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

Si potrebbe usare CASE, ma dovrete usare 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)