USO DE COALESCE

31/10/2007 - 01:53 por Nelva | Informe spam
Estimados

creo un procedimiento con criterios que el usuario desde un form ingresa/
hasta ahi todo bien el problema es que me muestra los registros cuando en
cualquiera de los criterios hay valores nulos?

Agradeceria cualquier ayuda!

CREATE PROCEDURE dbo.PCA_CSI_Consulta_Visitantes

@FechaInicio Datetime, @FechaFin Datetime,
@tvt1 Numeric(10), @tvt2 Numeric(10),
@vst1 Numeric(10), @vst2 Numeric(10),
@vgt1 Numeric(10),@vgt2 Numeric(10),
@pqo1 Numeric(10), @pqo2 Numeric(10),
@Dirc1 Numeric(10),@Dirc2 Numeric(10),
@tmt1 Numeric(10),@tmt2 Numeric(10),
@pc1 Numeric(10),@pc2 Numeric(10)
AS
SELECT DISTINCT
dbo.CSI_Visitantes.VST_ID,
dbo.CSI_Visitantes.VST_Consecutivo, dbo.CSI_Visitantes.VST_Fecha,
dbo.CSI_Visitantes.VST_HEntrada,
dbo.CSI_Visitantes.VST_HSalida,
dbo.CSI_Visitantes.VST_Funcionario
FROM dbo.CSI_Visitantes INNER JOIN
dbo.CSI_Tipo_Visita ON dbo.CSI_Visitantes.TVT_ID =
dbo.CSI_Tipo_Visita.TVT_ID INNER JOIN
dbo.Funcionarios ON dbo.CSI_Visitantes.VST_Vigilante =
dbo.Funcionarios.FUN_ID INNER JOIN
dbo.CSI_Tipo_Medio_Transporte ON
dbo.CSI_Visitantes.TMT_ID = dbo.CSI_Tipo_Medio_Transporte.TMT_ID LEFT OUTER
JOIN
dbo.Direcciones ON dbo.CSI_Visitantes.DIR_ID =
dbo.Direcciones.DIR_ID LEFT OUTER JOIN
dbo.CSI_Tipo_Parqueo ON dbo.CSI_Visitantes.TPQ_ID =
dbo.CSI_Tipo_Parqueo.TPQ_ID LEFT OUTER JOIN
dbo.Usuarios ON dbo.CSI_Visitantes.VST_Visitante =
dbo.Usuarios.USR_ID

WHERE ((dbo.CSI_Visitantes.VST_Fecha>= COALESCE (@FechaInicio, 0)) AND
(dbo.CSI_Visitantes.VST_Fecha <= COALESCE (@FechaFin,GETDATE())) )
AND ((dbo.CSI_Tipo_Visita.TVT_ID>= COALESCE (@tvt1, 0)) AND
(dbo.CSI_Tipo_Visita.TVT_ID <= COALESCE (@tvt2, 2147483647)) )
and ((dbo.Usuarios.USR_ID>= COALESCE (@vst1, 0)) AND (dbo.Usuarios.USR_ID
<= COALESCE (@vst2, 2147483647)) )
and ((dbo.Funcionarios.FUN_ID>= COALESCE (@vgt1, 0)) AND
(dbo.Funcionarios.FUN_ID <= COALESCE (@vgt2, 2147483647)))
and ((dbo.CSI_Tipo_Parqueo.TPQ_ID>= COALESCE (@pqo1, 0)) AND
(dbo.CSI_Tipo_Parqueo.TPQ_ID <= COALESCE (@pqo2, 2147483647)) )
and (( dbo.Direcciones.DIR_ID>= COALESCE (@Dirc1, 0)) AND
(dbo.Direcciones.DIR_ID <= COALESCE (@Dirc2, 2147483647)) )
and (( dbo.CSI_Tipo_Medio_Transporte.TMT_ID>= COALESCE (@tmt1, 0)) AND
(dbo.CSI_Tipo_Medio_Transporte.TMT_ID <= COALESCE (@tmt2, 2147483647)) )
and (( dbo.CSI_Visitantes.VST_Transporte >= COALESCE (@pc1, 0)) AND
(dbo.CSI_Visitantes.VST_Transporte <= COALESCE (@pc2, 2147483647)) )
 

Leer las respuestas

#1 jeastman - Hotmail
31/10/2007 - 02:49 | Informe spam
Hola Nelva...

Prueba lo siguiente, cualquier cosa avisas...

CREATE PROCEDURE dbo.PCA_CSI_Consulta_Visitantes
@FechaInicio Datetime, @FechaFin Datetime,
@tvt1 Numeric(10), @tvt2 Numeric(10),
@vst1 Numeric(10), @vst2 Numeric(10),
@vgt1 Numeric(10),@vgt2 Numeric(10),
@pqo1 Numeric(10), @pqo2 Numeric(10),
@Dirc1 Numeric(10),@Dirc2 Numeric(10),
@tmt1 Numeric(10),@tmt2 Numeric(10),
@pc1 Numeric(10),@pc2 Numeric(10)
AS


set @fechaInicio = isnull( @fechaInicio, '' )
set @fechaFin = isnull( @fechaFin, getdate() )

set @tvt1 = isnull( @tvt1, 0 )
set @tvt2 = isnull( @tvt2, 2147483647 )

set @vst1 = isnull( @vst1, 0)
set @vst2 = isnull( @vst2, 2147483647)

set @vgt1 = isnull( @vgt1, 0)
set @vgt2 = isnull( @vgt2, 2147483647)

set @pqo1 = isnull( @pqo1, 0)
set @pqo2 = isnull( @pqo2, 2147483647)

set @Dirc1 = isnull( @Dirc1, 0)
set @Dirc2 = isnull( @Dirc2, 2147483647)

set @tmt1 = isnull( @tmt1, 0 )
set @tmt2 = isnull( @tmt2, 2147483647)

set @pc1 = isnull( @pc1, 0)
set @pc2 = isnull( @pc2, 2147483647)




SELECT DISTINCT
dbo.CSI_Visitantes.VST_ID,
dbo.CSI_Visitantes.VST_Consecutivo, dbo.CSI_Visitantes.VST_Fecha,
dbo.CSI_Visitantes.VST_HEntrada,
dbo.CSI_Visitantes.VST_HSalida,
dbo.CSI_Visitantes.VST_Funcionario
FROM dbo.CSI_Visitantes INNER JOIN dbo.CSI_Tipo_Visita ON
dbo.CSI_Visitantes.TVT_ID = dbo.CSI_Tipo_Visita.TVT_ID
INNER JOIN dbo.Funcionarios ON
dbo.CSI_Visitantes.VST_Vigilante = dbo.Funcionarios.FUN_ID
INNER JOIN dbo.CSI_Tipo_Medio_Transporte ON
dbo.CSI_Visitantes.TMT_ID = dbo.CSI_Tipo_Medio_Transporte.TMT_ID
LEFT OUTER JOIN dbo.Direcciones ON
dbo.CSI_Visitantes.DIR_ID = dbo.Direcciones.DIR_ID
LEFT OUTER JOIN dbo.CSI_Tipo_Parqueo ON
dbo.CSI_Visitantes.TPQ_ID = dbo.CSI_Tipo_Parqueo.TPQ_ID
LEFT OUTER JOIN dbo.Usuarios ON
dbo.CSI_Visitantes.VST_Visitante = dbo.Usuarios.USR_ID

where dbo.CSI_Visitantes.VST_Fecha between @FechaInicio and @FechaFin
AND dbo.CSI_Tipo_Visita.TVT_ID between @tvt1 and @tvt2
and dbo.Usuarios.USR_ID between @vst1 and @vst2
and dbo.Funcionarios.FUN_ID between @vgt1 and @vgt2
and dbo.CSI_Tipo_Parqueo.TPQ_ID between @pqo1 and @pqo2
and dbo.Direcciones.DIR_ID between @Dirc1 and @Dirc2
and dbo.CSI_Tipo_Medio_Transporte.TMT_ID between @tmt1 and @tmt2
and dbo.CSI_Visitantes.VST_Transporte between @pc1 and @pc2

"Nelva" escribió en el mensaje
news:
Estimados

creo un procedimiento con criterios que el usuario desde un form ingresa/
hasta ahi todo bien el problema es que me muestra los registros cuando en
cualquiera de los criterios hay valores nulos?

Agradeceria cualquier ayuda!

CREATE PROCEDURE dbo.PCA_CSI_Consulta_Visitantes

@FechaInicio Datetime, @FechaFin Datetime,
@tvt1 Numeric(10), @tvt2 Numeric(10),
@vst1 Numeric(10), @vst2 Numeric(10),
@vgt1 Numeric(10),@vgt2 Numeric(10),
@pqo1 Numeric(10), @pqo2 Numeric(10),
@Dirc1 Numeric(10),@Dirc2 Numeric(10),
@tmt1 Numeric(10),@tmt2 Numeric(10),
@pc1 Numeric(10),@pc2 Numeric(10)
AS
SELECT DISTINCT
dbo.CSI_Visitantes.VST_ID,
dbo.CSI_Visitantes.VST_Consecutivo, dbo.CSI_Visitantes.VST_Fecha,
dbo.CSI_Visitantes.VST_HEntrada,
dbo.CSI_Visitantes.VST_HSalida,
dbo.CSI_Visitantes.VST_Funcionario
FROM dbo.CSI_Visitantes INNER JOIN
dbo.CSI_Tipo_Visita ON dbo.CSI_Visitantes.TVT_ID =
dbo.CSI_Tipo_Visita.TVT_ID INNER JOIN
dbo.Funcionarios ON dbo.CSI_Visitantes.VST_Vigilante
= dbo.Funcionarios.FUN_ID INNER JOIN
dbo.CSI_Tipo_Medio_Transporte ON
dbo.CSI_Visitantes.TMT_ID = dbo.CSI_Tipo_Medio_Transporte.TMT_ID LEFT
OUTER JOIN
dbo.Direcciones ON dbo.CSI_Visitantes.DIR_ID =
dbo.Direcciones.DIR_ID LEFT OUTER JOIN
dbo.CSI_Tipo_Parqueo ON dbo.CSI_Visitantes.TPQ_ID =
dbo.CSI_Tipo_Parqueo.TPQ_ID LEFT OUTER JOIN
dbo.Usuarios ON dbo.CSI_Visitantes.VST_Visitante =
dbo.Usuarios.USR_ID

WHERE ((dbo.CSI_Visitantes.VST_Fecha>= COALESCE (@FechaInicio, 0)) AND
(dbo.CSI_Visitantes.VST_Fecha <= COALESCE (@FechaFin,GETDATE())) )
AND ((dbo.CSI_Tipo_Visita.TVT_ID>= COALESCE (@tvt1, 0)) AND
(dbo.CSI_Tipo_Visita.TVT_ID <= COALESCE (@tvt2, 2147483647)) )
and ((dbo.Usuarios.USR_ID>= COALESCE (@vst1, 0)) AND (dbo.Usuarios.USR_ID
<= COALESCE (@vst2, 2147483647)) )
and ((dbo.Funcionarios.FUN_ID>= COALESCE (@vgt1, 0)) AND
(dbo.Funcionarios.FUN_ID <= COALESCE (@vgt2, 2147483647)))
and ((dbo.CSI_Tipo_Parqueo.TPQ_ID>= COALESCE (@pqo1, 0)) AND
(dbo.CSI_Tipo_Parqueo.TPQ_ID <= COALESCE (@pqo2, 2147483647)) )
and (( dbo.Direcciones.DIR_ID>= COALESCE (@Dirc1, 0)) AND
(dbo.Direcciones.DIR_ID <= COALESCE (@Dirc2, 2147483647)) )
and (( dbo.CSI_Tipo_Medio_Transporte.TMT_ID>= COALESCE (@tmt1, 0)) AND
(dbo.CSI_Tipo_Medio_Transporte.TMT_ID <= COALESCE (@tmt2, 2147483647)) )
and (( dbo.CSI_Visitantes.VST_Transporte >= COALESCE (@pc1, 0)) AND
(dbo.CSI_Visitantes.VST_Transporte <= COALESCE (@pc2, 2147483647)) )




Preguntas similares