Ayuda con Store Procedure

Hola iislas:
Molestándote de nuevo, por favor si pudieras ayudarme, mira por ejemplo si tuviera una Tabla llemémosla Personal con los siguientes campos:
IdPersonal (int, no null)
Nombre(varchar(100), no null)
Apellido(varchar(100), no null)
FechaNac(smalldatetime, no null)
Activo(bit, no null)
IdDepartamento(int, no null)
Y quisiera hacer una un SP pero el que pueda realizar diferentes tipos de consulta, por ejemplo:
Todos lo que están activos,
Todos los que nacieron entre un rango de fechas y están activos,
Todos los que pertenecen a un departamento y están activos,
Todos los registros
Estoy haciendo una aplicación en VB.Net y desde ahi le puedo mandar una colsulta a la BD y lo condiciono si es que he seleccionado los filtros que deseo darle, pe. Si quiero los activos, le agrego al WHERE un AND Activo = True, si quiero adicionalmente que pertenezcan a un Dpto le agrego un AND IdDepartamento = XXX, y si no simplemente no agrego nada al WHERE, así me funciona, pero hacerlo con un SP en SQL Server 2005 Express no se como hacerlo, o tengo que crear un SP diferente para tipo de consulta que quiero.
Si podrías ayudarme.

1 Respuesta

Respuesta
1
No, puedes crear un SP y dependiendo de los parámetros, si traen dato o no, puedes hacer un COALESCE, ejemplo:
create procedure ups_ConsultaVariable
@Nombre varchar(50),
@Paterno varchar(50),
@Materno varchar(50),
@Departamento int
As
   Begin
     set nocount on
     select * from personal where nombre like coalesce('%'+@nombre+'%','%') and paterno like coalesce('%'+@Paterno+'%','%') and materno like coalesce('%'+@Materno+'%', '%') and departamento like coalasce('%'+cast(@Departamento as varchar(10)) +'%','%')
  end
iislas,
Probé con el Coalesce y si me responde, incluso con las fechas, que lo hago así:
AND Fecha >= Coalesce (@FecIni, 0) AND Fecha <= Coalesce (@FecFin, GetDate())
Pero también necesito hacer algunas consulta filtrando pe. El IdPersonal entre una relación de Id, osea usando: AND IdPersonal IN (Relación de Ids), le estoy dando vueltas y no sé como hacerlo con el Coalesce.
Gracias de antemano.
Los valores que van en IN(), son fijos o variables.
Estos valores son variables, pues se usa para filtrar de acuerdo a un nodo de un árbol, para lo cual uso una CTE recursiva y obtengo los códigos de todos los hijos de este nodo y los paso como la lista del IN.
Saludos.
No, pues si son variables, no le veo de otra, que utilizar QUERY DINÁMICO, en verdad que no encuentro otra solución, o bien, colocar esas variables en una tabla temporal.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas