Discriminar Parámetros en Transact Sql

Bueno para comenzar mi nombre es víctor y estoy comenzando con el tema transact.
Lo que pasa es que estoy desarrollando un sistema que trabaja con cristal report y eh creado una consulta, la cual tiene N parámetros, mi duda es la siguiente existe alguna forma de hacer discriminar el resultado del select utilizando los parámetros que yo desee.
Es decir, si mi procedimiento es el siguiente:
CREATE PROCEDURE DeudaPorFuncionario
@DiaPago int, @Empleador int, @ano int, @mes int, @Institucion int, @NomInstitucion as Varchar(50)
AS
select * FROM Deuda LEFT OUTER JOIN
Institucion ON Deuda.CodigoIntitucion = Institucion.CodigoInstitucion LEFT OUTER JOIN
Funcionario ON Deuda.Rut = Funcionario.Rut RIGHT OUTER JOIN
LetraPactada ON Deuda.CodigoDeuda = LetraPactada.CodigoDeuda RIGHT OUTER JOIN
Empleador ON Funcionario.CodigoEmpleador = Empleador.CodigoEmpleador
GROUP BY LetraPactada.EstadoPago, Funcionario.Rut, Funcionario.Nombre, Funcionario.ApellidoPaterno, Funcionario.ApellidoMaterno, Funcionario.DiaDePago,
Deuda.Rut, Empleador.Descripcion, Funcionario.CodigoEmpleador, LetraPactada.FechaDePago, Institucion.CodigoInstitucion
HAVING (LetraPactada.EstadoPago = 'E') AND (Funcionario.DiaDePago = @DiaPago) AND (Funcionario.CodigoEmpleador = @Empleador) AND (MONTH(LetraPactada.FechaDePago)
= @mes) AND (YEAR(LetraPactada.FechaDePago) = @ano) AND (Institucion.CodigoInstitucion = @Institucion)
ORDER BY Nombre
Como puedes ver existen 6 parámetros cual seria la estructura para utilizar algunos de los parámetros por ejemplo solo @ano, solo @mes, o @mes y @ano, o N combinación...
Pero que sean los que necesito...
Estoy trabajando con visual basic 6 y sql server 2000

1 Respuesta

Respuesta
La única forma que tienes para realizar es verificando el parámetro que llega y realizar decisiones por cada tipo de parámetro o combinación de los mismos.
Es decir, ver los que vas a utilizar en un if, otro if, si es otra combinación y así hasta el final.
Lo que puedes implementar también es:
CREATE PROCEDURE DeudaPorFuncionario
@DiaPago int=null, @Empleador int=null , @ano int=null, @mes int=null, @Institucion int=null, @NomInstitucion as Varchar(50)=null
Bueno a mi también se me había ocurrido hacerlo así, de hecho realice algunas pruebas pero me di cuenta lo poco que sabia de transact.
De hecho rate de hacerlo así:
if @DiaPago <> null
begin
AND (Funcionario.DiaDePago = @DiaPago)
end
AND (Funcionario.CodigoEmpleador = @Empleador)
Pero me tira el error 156: sintaxis incorrecta cerca de la palabla clave 'AND'
Me podrías explicar cual debería ser la sintaxis correcta, por que, es hay donde estoy topando...
Gracias pero Son demasiadas combinaciones, ya que tendría que repetir el código 7 veces más las combinaciones..
Ahora ya tengo la respuesta
En lugar de hacerlo así:
AND (Funcionario.DiaDePago = @DiaPago)
lo hago asi:
AND (Funcionario.DiaDepago=@DiaPago or isnull(@DiaPago,0)=0)
Así no toma en cuenta el parámetro si es null
Muchas gracias por tu tiempo...
Tienes que repetir la sentencia completa de select hasta donde cambia el AND que me comentas, es un poco engorroso pero así se trabaja con el sql.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas