Existe un super super super truco que me pirateé de algún código de por la red
. Te permite hacer que las variables sean opcionales, si no tiene valor (null) entonces asume que no hay filtro y que verás todo:
CREATE PROCEDURE miproc(
@filtro int
)AS
SELECT cosa
FROM tabla
WHERE campo = @filtro OR @filtro IS NULL
De esa manera te evitas tener múltiples sentencias o tener que lidiar con el SQL dinámico.
No hay magia, ya que lo analicé es justo lo que dices que haga, pero nunca se me había ocurrido hasta que lo vi