Supongamos que hay un procedimiento almacenado que tiene 3 params. De todas las posibilidades, estoy buscando para lograr esto con una sola cláusula WHERE
sin llegar fuera de control con el uso de () AND() OR()
demasiado ...Argumentos opcionales en WHERE Cláusula
Ejemplo:
//Params
@CITY VARCHAR(100) = NULL,
@GENDER VARCHAR(100) = NULL,
@AGE VARCHAR(100) = NULL
supongo que puede hacerlo usando IF BEGIN ... END
para cada variable si existe, pero eso hace que el código sea mucho más largo que el deseado ...
Este método a continuación no funcionará porque es demasiado largo (hay aproximadamente 10 campos diferentes como este, pero el ejemplo es solo 3.) y no estoy seguro de si incluso directamente obtiene valores distintivos ...
SELECT NAME FROM TABLE
WHERE (
([email protected] AND [email protected] AND [email protected])
OR ([email protected] AND [email protected])
OR ([email protected] AND [email protected])
OR ([email protected] AND [email protected])
OR ([email protected])
OR ([email protected])
OR ([email protected])
)
¿Existe alguna forma más eficiente para hacer esto?
En caso afirmativo, es preferible que el método también sea compatible con JOIN.
Side-nota: cuando se define un VARCHAR() '- como un parámetro para un programa almacenado o una variable local - ¡** siempre ** debe tener ** una duración ** definida! De lo contrario, podría terminar con cadenas 'VARCHAR (1)' inadvertidamente ... –
Campos opcionales que significan si no hay ningún valor o 'NULL', y luego no lo muestran en la cláusula Where, ¿es posible? –
Lea esto: [Condiciones dinámicas de búsqueda en T-SQL] (http://sommarskog.se/dyn-search-2008.html) –