2012-04-13 13 views
8

Quiero seleccionar un proceso almacenado para ejecutar basado en la entrada del usuario. Algo así como -podemos usar CASE con EXEC

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

Se puede hacer esto con CASE o debería considerar el uso de la construcción If?

+2

'CASE' se utilizado para la evaluación en línea dentro de una consulta. Desea 'IF' ya que es una construcción de control de flujo. – JNK

Respuesta

8

que desea utilizar el constructo IF aquí:

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

Puede hacerlo de esta manera:

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

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

Creo que quieres usar 'IF' en lugar de' CASE' aquí ... Esta es una sintaxis inválida. – JNK

+0

Sí @JNK tiene razón, había intentado el código anterior más temprano, y no había funcionado. – neuDev33

+0

@ neuDev33 bien, puedes usar 'IF' entonces. Estaba usando la sintaxis de Sybase-ASE: P –

2

En este escenario Creo que incluso si SQL Server permite que, una FI sería más clara.

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

Usted podría utilizar CASO, pero vas a tener que utilizar 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) 
Cuestiones relacionadas