lanzamiento full fecha edition developer sql sql-server case where

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