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)) )

Preguntas similare

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)) )




Respuesta Responder a este mensaje
#2 Nelva
31/10/2007 - 02:50 | Informe spam
Correccion, no muestra los registros.

"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)) )




Respuesta Responder a este mensaje
#3 Alejandro Mesa
31/10/2007 - 16:19 | Informe spam
Hola Nelva,

Pudieras postear la estructura de las tablas involucradas?

No se si algunas de las columnas que usas en las expresiones de filtro, en
la clausula "where", pueden contener valor NULL, lo cual invalida la
expresion. Por ejemplo, la expresion:

((dbo.CSI_Visitantes.VST_Fecha>= COALESCE (@FechaInicio, 0))
AND (dbo.CSI_Visitantes.VST_Fecha <= COALESCE (@FechaFin,GETDATE())) )



dara como resultado FALSE, para las filas cuyo valor sea NULL, si la columna
VST_Fecha acepta valores NULL.

En este articulo toca el tema de busquedas dinamicas a fondo.

Dynamic Search Conditions in T-SQL
http://www.sommarskog.se/dyn-search.html

AMB


"Nelva" wrote:

Correccion, no muestra los registros.

"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)) )
>
>
>
>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida