full - sql server 2019 lanzamiento
CASO en DONDE, SQL Server (5)
Algunas maneras:
-- Do the comparison, OR''d with a check on the @Country=0 case
WHERE (a.Country = @Country OR @Country = 0)
-- compare the Country field to itself
WHERE a.Country = CASE WHEN @Country > 0 THEN @Country ELSE a.Country END
O, use una declaración generada dinámicamente y agregue solo la condición País si es apropiado. Esto debería ser más eficiente en el sentido de que solo ejecuta una consulta con las condiciones que realmente deben aplicarse y puede resultar en un mejor plan de ejecución si los índices de respaldo están en su lugar. Necesitaría usar SQL parametrizado para prevenir contra la inyección de SQL.
Estoy haciendo una búsqueda, donde los usuarios están eligiendo en el desplegable algunas cláusulas. Cuando dejan un cuadro vacío, quiero que la consulta ignore la cláusula. Sé que CASE, y lo mejor que pensé es que si paso 0 al parámetro en el procedimiento almacenado, ignora ese parámetro, así.
WHERE a.Country = (CASE WHEN @Country > 0 THEN @Country ELSE (something else) END)
por lo tanto, (otra cosa) debería ser como ninguna condición, puede ser ''> 0'' ya que los identificadores de país son de todos> 1, pero no sé cómo usar> y = en el mismo CASO.
¿Alguna sugerencia?
Prueba esto:
WHERE a.Country = (CASE WHEN @Country > 0 THEN @Country ELSE a.Country END)
Puedes simplificar a:
WHERE a.Country = COALESCE(NULLIF(@Country,0), a.Country);
(something else)
debe ser un a.Country
si el Country
es anulable, haga que (something else)
sea un. a.Country OR a.Country is NULL
.. ELSE a.Country ...
supongo