Para dejar mas claro plantearemos un modelo de datos en el que tenemos almacenado en tres tablas la siguiente información: Departamento con un listado de departamentos, Municipio contiene un listado de municipios que están relacionados la tabla Departamentos y finalmente una tabla llamada Estudiante que contiene un listado de estudiantes los cuales residen en un municipio. El diagrama del modelo de datos seria mas o menos el siguiente.
Ahora si realizamos un procedimiento almacenado que al ejecutarlo nos retorne el resultado de todos los estudiante con su respectivo nombre, municipio y departamento donde reside. El resultado de datos seria mas o menos el siguiente .
La consulta SQL requerida para generar la información anteriormente presentada seria la siguiente.
Ahora bien, imaginemos que queremos aplicar al mismo conjunto de datos varios filtros y que estos a su vez sean opcionales, para ello crearemos un procedimiento almacenado y la estructura seria la siguiente.
Ahora si lo queremos podemos ejecutar nuestro procedimiento ya sea teniendo como filtro en las búsquedas el DepartamentoID, MunicipoID o DepartamentoID y MunipioID. La instrucción para ejecutar nuestro procedimiento ConsultarEstudiantes es el siguiente





2 comentarios:
Excelente tema, el único problema está cuando intentas comparar valores NULL, es decir, el campo en la Base de Datos está declarado como que acepta valores NULL, y el dato en la BD que se compara es NULL.
Es ahí cuando la comparación no te serviría, ya que no es lo mismo comparar 1=1 que NULL=NULL
salu2
Tienes razón, en http://helibertoarias.com/sql/consultas-con-filtros-opcionales-en-sql-server/ puedes encontrar una variante a este post que me parece mas eficiente.
Saludos.
Publicar un comentario