Estoy deseando poder hacer algo como lo siguiente en SQl Server 2005 (que sé que no es válido) para mi cláusula where. Algunas veces @teamID (pasado a un procedimiento almacenado) será el valor de un ID de equipo existente, de lo contrario siempre será cero y quiero todas las filas de la tabla de Equipo.Operador condicional en SQL Donde Cláusula
Investigué usando Case y el operador debe venir antes o después de la declaración completa, lo que me impide tener un operador diferente basado en el valor de @teamid. Cualquier sugerencia que no sea la de duplicar mis declaraciones seleccionadas.
declare @teamid int
set @teamid = 0
Select Team.teamID From Team
case @teamid
when 0 then
WHERE Team.teamID > 0
else
WHERE Team.teamID = @teamid
end
No creo que valga la pena la complejidad añadida de SQL dinámico o dos bloques IF, a menos que esté consultando la base de datos de la Asociación Nacional de Deportes de China ;-) – Andomar
¿Pero la ganancia de rendimiento vale la complejidad y la pérdida de costes de mantenimiento? ? – tpdi
Las tres opciones tienen sus pros y contras: omita un corchete en la sugerencia de Andomar, y las cosas no funcionarán como se esperaba. –