SQL condicional SELECT

Me gustaría crear un procedimiento almacenado con parameters que indiquen qué campos se deben seleccionar.

Por ejemplo, me gustaría pasar dos parameters "selectField1" y "selectField2" cada uno como bools.

Entonces quiero algo como

SELECT if (selectField1 = true) Field1 ELSE do not select Field1 if (selectField2 = true) Field2 ELSE do not select Field2 FROM Table 

Gracias Karl

Parece que quieren la capacidad de devolver solo los campos permitidos, lo que significa que la cantidad de campos devueltos también debe ser dinámica. Esto funcionará con 2 variables. Cualquier cosa más que eso se volverá confuso.

 IF (selectField1 = true AND selectField2 = true) BEGIN SELECT Field1, Field2 FROM Table END ELSE IF (selectField1 = true) BEGIN SELECT Field1 FROM Table END ELSE IF (selectField2 = true) BEGIN SELECT Field2 FROM Table END 

SQL dynamic ayudará con múltiplos. Este ejemplo asume que al less 1 columna es verdadera.

 DECLARE @sql varchar(MAX) SET @sql = 'SELECT ' IF (selectField1 = true) BEGIN SET @sql = @sql + 'Field1, ' END IF (selectField2 = true) BEGIN SET @sql = @sql + 'Field2, ' END ... -- DROP ', ' @sql = SUBSTRING(@sql, 1, LEN(@sql)-2) SET @sql = @sql + ' FROM Table' EXEC(@sql) 

En SQL , lo haces de esta manera:

 SELECT CASE WHEN @selectField1 = 1 THEN Field1 ELSE NULL END, CASE WHEN @selectField2 = 1 THEN Field2 ELSE NULL END FROM Table 

El model relacional no implica recuento de campo dynamic.

En cambio, si no está interesado en un valor de campo, simplemente select un NULL lugar y analícelo en el cliente.

Desea la statement CASE :

 SELECT CASE WHEN @SelectField1 = 1 THEN Field1 WHEN @SelectField2 = 1 THEN Field2 ELSE NULL END AS NewField FROM Table 

EDITAR: Mi ejemplo es para combinar los dos campos en un campo, dependiendo de los parameters proporcionados. Es una solución de uno o ninguno (no ambos). Si desea la posibilidad de tener ambos campos en la salida, use la solución de Quassnoi.

 @selectField1 AS bit @selectField2 AS bit SELECT CASE WHEN @selectField1 THEN Field1 WHEN @selectField2 THEN Field2 ELSE someDefaultField END FROM Table 

Es esto lo que estás buscando?

Esta es una manera psuedo de hacerlo

 IF (selectField1 = true) SELECT Field1 FROM Table ELSE SELECT Field2 FROM Table 

lo que quieres es:

  MY_FIELD= case when (selectField1 = 1) then Field1 else Field2 end, 

en el seleccionado

Sin embargo, ¿no solo no muestra esa columna en su progtwig?

La forma novata de hacer esto:

 SELECT field1, field2 FROM table WHERE field1 = TRUE OR field2 = TRUE 

Puede administrar esta información correctamente en el lenguaje de progtwigción solo haciendo un if-else.

Ejemplo en ASP / JavaScript

 // Code to retrieve the ADODB.Recordset if (rs("field1")) { do_the_stuff_a(); } if (rs("field2")) { do_the_stuff_b(); } rs.MoveNext();