Usar NULL en variable/parámetro para indicar que no usaremos dicho filtro

publicado por: Anonymous

Tengo una consulta con varias condiciones en la clausula where y tengo un parámetro que puede ser null y tiene registros. En este caso @codigo puede tener valor o puede ser null. Cuando aplico @codigo is null or codigo = @codigo las demás condiciones no se cumplen y me lista todos los productos de cualquier tipo, de todas las tiendas por ejemplo.

   select * 
          from tb_producto 
          where id_tipoproducto = @tipo 
                and id_tienda = @id_tienda 
                and codigo_producto = @codigo

solución

Depende de lo que quieras hacer con @codigo cuando éste sea NULL.

Si es una forma de indicar -> “No filtramos por este dato” puedes hacer esto:

select * 
      from tb_producto 
      where id_tipoproducto = @tipo 
            and id_tienda = @id_tienda 
            and (@codigo IS NULL OR codigo_producto = @codigo)

Ahora si en la tabla efectivamente hay valores de codigo_producto = NULL y queremos recuperarlos:

select * 
      from tb_producto 
      where id_tipoproducto = @tipo 
            and id_tienda = @id_tienda 
            and ((@codigo IS NULL AND codigo_producto IS NULL)
                  OR
                  (codigo_producto = @codigo)
                )
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *