Problema con query sencillo

05/09/2007 - 19:00 por Cacho | Informe spam
Muy buenas.
Antes que nada deseo agradecer la posibilidad de postear en el foro y la
atención que puedan dispensarme.
Tengo un problema con un query sencillo y la descripción es:
En SQL2005 tengo una tabla que consultar, esta tabla tiene vistas ya
armadas, organizadas mensualmente.

La consulta es sencillita:
SELECT campo1, campo2, ... FROM tabla
WHERE campoFecha BETWEEN fecha1 AND fecha2 AND campoInt = entero.

Tanto campoFecha como campoInt pertenecen a la Primary Key.
campoFecha es el primer campo de la Primary Key, campoInt está en el 4°
lugar, La Primary Key contiene cinco campos.

Problema:
El resultado de la consulta es erroneo, es decir que los registros que me
devuelve no son los que espero y no corresponden al criterio ingresado.

Al consultar el plan de ejecución, noto que el query usa una vista, pero
esta vista no pertenece al rango de fechas ingresado como criterio.
Si quito el campoInt del criterio, el query usa la tabla y no la vista por
lo que el resultado es correcto.

Perdon por la extension y desde ya, muchas gracias por leer.

Preguntas similare

Leer las respuestas

#1 Maxi
05/09/2007 - 20:29 | Informe spam
Cacho, a ver, usted esta haciendo un query a una tabla o una vista?
segundo, porque dice que los datos no son los del criterio? que deberia
retornar y que cosa no esta retornando? usted no tendra el problema en el
rango de fechas no? sabe usted que SQL almacena Fecha + hora y que por
ejemplo en su codigo si las puntas son

1/1/2007 a 1/10/2007 este ultimo solo consultara hasta las 00:00, si usted
desea inculir bien las fechas de deberia olvidar del betWeen y usar algo
como esto

WHERE FECHA >='20070101' AND FECHA < '20071002'

No comprendo lo ultimo, como que el query plan usa o no la vista dependiendo
del parametro? usted esta viendo correctamente? podria poner el query plan
en formato texto aqui para que lo analicemos?


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Cacho" escribió en el mensaje
news:
Muy buenas.
Antes que nada deseo agradecer la posibilidad de postear en el foro y la
atención que puedan dispensarme.
Tengo un problema con un query sencillo y la descripción es:
En SQL2005 tengo una tabla que consultar, esta tabla tiene vistas ya
armadas, organizadas mensualmente.

La consulta es sencillita:
SELECT campo1, campo2, ... FROM tabla
WHERE campoFecha BETWEEN fecha1 AND fecha2 AND campoInt = entero.

Tanto campoFecha como campoInt pertenecen a la Primary Key.
campoFecha es el primer campo de la Primary Key, campoInt está en el 4°
lugar, La Primary Key contiene cinco campos.

Problema:
El resultado de la consulta es erroneo, es decir que los registros que me
devuelve no son los que espero y no corresponden al criterio ingresado.

Al consultar el plan de ejecución, noto que el query usa una vista, pero
esta vista no pertenece al rango de fechas ingresado como criterio.
Si quito el campoInt del criterio, el query usa la tabla y no la vista por
lo que el resultado es correcto.

Perdon por la extension y desde ya, muchas gracias por leer.

Respuesta Responder a este mensaje
#2 Cacho
05/09/2007 - 21:50 | Informe spam
Hola.

Resolví el problema usando un "stored procedure" en lugar de sql dinámico.
No puedo explicar exactamente por que, pero asi, si obtengo lo que espero.
Respuesta Responder a este mensaje
#3 Cacho
05/09/2007 - 22:00 | Informe spam
Hola Maxi. Gracias por contestar.

Aunque ya lo resolvi (esta posteado), te contesto.

la consulta la hago sobre la tabla. el plan de ejecucion del query elige
solo una vista de las disponibles para optimizar la velocidad de respuesta.

no se como adjuntarte el plan de ejecucion a este post, ya que es bastante
extenso como para pegarlo. la consulta exacta es:

SELECT N.idNoticia, F.DescInterna As Fuente, N.Fecha, N.Titulo, A.Ruta,
A.Nombre, VW.URL
FROM Noticias N WITH(NOLOCK)
INNER JOIN Fuentes F WITH(NOLOCK) ON
F.idFuente = N.idFuente
LEFT JOIN VinculosWeb VW WITH(NOLOCK) ON
N.idVinculosWeb = VW.idVinWeb
LEFT JOIN Archivos A WITH(NOLOCK) ON
N.idArchivos = A.idGrupo
WHERE N.fecha BETWEEN '30/08/2007' AND '30/08/2007' AND F.idFuente = 93

Ahora esto esta en un stored procedure y en lugar de las cadenas de fechas
hay variables, y funciona.

Muchas gracias por tu atención.

"Maxi" wrote:

Cacho, a ver, usted esta haciendo un query a una tabla o una vista?
segundo, porque dice que los datos no son los del criterio? que deberia
retornar y que cosa no esta retornando? usted no tendra el problema en el
rango de fechas no? sabe usted que SQL almacena Fecha + hora y que por
ejemplo en su codigo si las puntas son

1/1/2007 a 1/10/2007 este ultimo solo consultara hasta las 00:00, si usted
desea inculir bien las fechas de deberia olvidar del betWeen y usar algo
como esto

WHERE FECHA >='20070101' AND FECHA < '20071002'

No comprendo lo ultimo, como que el query plan usa o no la vista dependiendo
del parametro? usted esta viendo correctamente? podria poner el query plan
en formato texto aqui para que lo analicemos?


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Cacho" escribió en el mensaje
news:
> Muy buenas.
> Antes que nada deseo agradecer la posibilidad de postear en el foro y la
> atención que puedan dispensarme.
> Tengo un problema con un query sencillo y la descripción es:
> En SQL2005 tengo una tabla que consultar, esta tabla tiene vistas ya
> armadas, organizadas mensualmente.
>
> La consulta es sencillita:
> SELECT campo1, campo2, ... FROM tabla
> WHERE campoFecha BETWEEN fecha1 AND fecha2 AND campoInt = entero.
>
> Tanto campoFecha como campoInt pertenecen a la Primary Key.
> campoFecha es el primer campo de la Primary Key, campoInt está en el 4°
> lugar, La Primary Key contiene cinco campos.
>
> Problema:
> El resultado de la consulta es erroneo, es decir que los registros que me
> devuelve no son los que espero y no corresponden al criterio ingresado.
>
> Al consultar el plan de ejecución, noto que el query usa una vista, pero
> esta vista no pertenece al rango de fechas ingresado como criterio.
> Si quito el campoInt del criterio, el query usa la tabla y no la vista por
> lo que el resultado es correcto.
>
> Perdon por la extension y desde ya, muchas gracias por leer.
>



Respuesta Responder a este mensaje
#4 Maxi
05/09/2007 - 22:15 | Informe spam
Hola, insito en que algo esta mirando mal, si la consulta es sobre una tabla
SQL no buscara vistas, el plan de ejecucion para ponerlo en formato texto
debe usar:

SET SHOWPLAN_ALL


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Cacho" escribió en el mensaje
news:
Hola Maxi. Gracias por contestar.

Aunque ya lo resolvi (esta posteado), te contesto.

la consulta la hago sobre la tabla. el plan de ejecucion del query elige
solo una vista de las disponibles para optimizar la velocidad de
respuesta.

no se como adjuntarte el plan de ejecucion a este post, ya que es bastante
extenso como para pegarlo. la consulta exacta es:

SELECT N.idNoticia, F.DescInterna As Fuente, N.Fecha, N.Titulo, A.Ruta,
A.Nombre, VW.URL
FROM Noticias N WITH(NOLOCK)
INNER JOIN Fuentes F WITH(NOLOCK) ON
F.idFuente = N.idFuente
LEFT JOIN VinculosWeb VW WITH(NOLOCK) ON
N.idVinculosWeb = VW.idVinWeb
LEFT JOIN Archivos A WITH(NOLOCK) ON
N.idArchivos = A.idGrupo
WHERE N.fecha BETWEEN '30/08/2007' AND '30/08/2007' AND F.idFuente = 93

Ahora esto esta en un stored procedure y en lugar de las cadenas de fechas
hay variables, y funciona.

Muchas gracias por tu atención.

"Maxi" wrote:

Cacho, a ver, usted esta haciendo un query a una tabla o una vista?
segundo, porque dice que los datos no son los del criterio? que deberia
retornar y que cosa no esta retornando? usted no tendra el problema en el
rango de fechas no? sabe usted que SQL almacena Fecha + hora y que por
ejemplo en su codigo si las puntas son

1/1/2007 a 1/10/2007 este ultimo solo consultara hasta las 00:00, si
usted
desea inculir bien las fechas de deberia olvidar del betWeen y usar algo
como esto

WHERE FECHA >='20070101' AND FECHA < '20071002'

No comprendo lo ultimo, como que el query plan usa o no la vista
dependiendo
del parametro? usted esta viendo correctamente? podria poner el query
plan
en formato texto aqui para que lo analicemos?


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Cacho" escribió en el mensaje
news:
> Muy buenas.
> Antes que nada deseo agradecer la posibilidad de postear en el foro y
> la
> atención que puedan dispensarme.
> Tengo un problema con un query sencillo y la descripción es:
> En SQL2005 tengo una tabla que consultar, esta tabla tiene vistas ya
> armadas, organizadas mensualmente.
>
> La consulta es sencillita:
> SELECT campo1, campo2, ... FROM tabla
> WHERE campoFecha BETWEEN fecha1 AND fecha2 AND campoInt = entero.
>
> Tanto campoFecha como campoInt pertenecen a la Primary Key.
> campoFecha es el primer campo de la Primary Key, campoInt está en el 4°
> lugar, La Primary Key contiene cinco campos.
>
> Problema:
> El resultado de la consulta es erroneo, es decir que los registros que
> me
> devuelve no son los que espero y no corresponden al criterio ingresado.
>
> Al consultar el plan de ejecución, noto que el query usa una vista,
> pero
> esta vista no pertenece al rango de fechas ingresado como criterio.
> Si quito el campoInt del criterio, el query usa la tabla y no la vista
> por
> lo que el resultado es correcto.
>
> Perdon por la extension y desde ya, muchas gracias por leer.
>



Respuesta Responder a este mensaje
#5 Maxi
05/09/2007 - 22:17 | Informe spam
Hola, la verdad que si usted no nos pone todos los detalles no hay forma de
poderlo ayudar hombre! sql-dinamico? donde, en su codigo anterior no hay
SQL-Dinamico! es mas con SQL-dinamico o con SP deberia funcionar igual, algo
mal esta pasandole como parametros o la query, pero en fin


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Cacho" escribió en el mensaje
news:
Hola.

Resolví el problema usando un "stored procedure" en lugar de sql dinámico.
No puedo explicar exactamente por que, pero asi, si obtengo lo que espero.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida