Consulta a través de procedimiento almacenado

08/02/2010 - 16:54 por Alberto | Informe spam
Estoy haciendo una consulta sencilla sobre una única tabla empleando un
procedimiento almacenado.

Solo intervienen tres parámetros: @IDProveedor (código de proveedor),
@FechaDesde y @FechaHasta. En la tabla tengo el código del proveedor y
un campo llamado FechaEntrada.

El problema es que se pueden hacer tres tipos de consultas:
- indicando solo el código del proveedor.
- indicando solo fecha desde y fecha hasta
- indicando código de proveedor y las fechas desde y fecha hasta.

En la cabecera del procedimiento almacenado declaro los parámetros así:
@IDProveedor smallint = NULL,
@FechaDesde smallDateTime = NULL,
@FechaHasta smallDateTime = NULL

Me pararece un poco fuerte hacer un if dentro del procedimiento con
cuatro ramas: tres para los casos que comentaba antes y otro para el
caso error (es decir, que vengan todos los parámetros con NULL).

El Where de la select del tercer caso la estoy haciendo así:

Where IDProveedor = @IDProveedor and
FechaEntrada >= @FechaDesde and
FechaEntrada <= @FechaHasta

¿Tengo un modo mejor de solucionarlo que haciendo el if con las cuatro
ramas? Muchas gracias.

Preguntas similare

Leer las respuestas

#6 Gustavo Cantero
09/02/2010 - 14:52 | Informe spam
El problema de hacer un where con esas opciones o de usar una
variable donde crear "dinámicamente" la consulta es que el procedimiento
no va a estar utilizando los índices eficientemente, en cambio haciendo
los IF, aunque sean tres consultas,
cada una va a usar el índice que más le convenga.
Saludos.

Gustavo A. Cantero
Scientia® Soluciones Informáticas
MCP - MCSD - MCTS - MCPD
http://www.scientia.com.ar
http://www.programandoamedianoche.com
http://foro.scientia.com.ar

De: L. Garcia [mailto:]
Expuesto a las: Martes, 09 de Febrero de 2010 09:31 a.m.
Expuesto en: microsoft.public.es.sqlserver
Conversación: Consulta a través de procedimiento almacenado
Asunto: Re: Consulta a través de procedimiento almacenado

Hola:

En vez de hacer varios IF, podrias hacer una sola condicion WHERE:

WHERE (IdProveedor = @IdProveedor OR @IdProveedor IS NULL)
AND (idem con las fechas)

Otra cosa es el rendimiento de la consulta, lo deberías de comprobar ;-)

Saludos

"Alberto" escribió en el mensaje
news:
Estoy haciendo una consulta sencilla sobre una única tabla empleando


un
procedimiento almacenado.

Solo intervienen tres parámetros: @IDProveedor (código de proveedor),
@FechaDesde y @FechaHasta. En la tabla tengo el código del proveedor y


un
campo llamado FechaEntrada.

El problema es que se pueden hacer tres tipos de consultas:
- indicando solo el código del proveedor.
- indicando solo fecha desde y fecha hasta
- indicando código de proveedor y las fechas desde y fecha hasta.

En la cabecera del procedimiento almacenado declaro los parámetros


así:
@IDProveedor smallint = NULL,
@FechaDesde smallDateTime = NULL,
@FechaHasta smallDateTime = NULL

Me pararece un poco fuerte hacer un if dentro del procedimiento con


cuatro
ramas: tres para los casos que comentaba antes y otro para el caso


error
(es decir, que vengan todos los parámetros con NULL).

El Where de la select del tercer caso la estoy haciendo así:

Where IDProveedor = @IDProveedor and
FechaEntrada >= @FechaDesde and
FechaEntrada <= @FechaHasta

¿Tengo un modo mejor de solucionarlo que haciendo el if con las cuatro

ramas? Muchas gracias.
Respuesta Responder a este mensaje
#7 Miguel Egea
15/02/2010 - 10:08 | Informe spam
Where ( IDProveedor = @IDProveedor or @idProveedor is null ) and
( FechaEntrada >= @FechaDesde or @fechaDesde is null) and
( FechaEntrada <= @FechaHasta or @fechahasta is null)


El caso es que desde el punto de vista de rendimiento seria mejor hacer al
menos dos con un if, algo así

if not @idproveedor is null


Espero que ayude y no sea tarde

Saludos Cordiales
Miguel Egea
Solid Quality Mentos
http://www.portalsql.com

"Alberto" escribió en el mensaje de
noticias:
Estoy haciendo una consulta sencilla sobre una única tabla empleando un
procedimiento almacenado.

Solo intervienen tres parámetros: @IDProveedor (código de proveedor),
@FechaDesde y @FechaHasta. En la tabla tengo el código del proveedor y un
campo llamado FechaEntrada.

El problema es que se pueden hacer tres tipos de consultas:
- indicando solo el código del proveedor.
- indicando solo fecha desde y fecha hasta
- indicando código de proveedor y las fechas desde y fecha hasta.

En la cabecera del procedimiento almacenado declaro los parámetros así:
@IDProveedor smallint = NULL,
@FechaDesde smallDateTime = NULL,
@FechaHasta smallDateTime = NULL

Me pararece un poco fuerte hacer un if dentro del procedimiento con cuatro
ramas: tres para los casos que comentaba antes y otro para el caso error
(es decir, que vengan todos los parámetros con NULL).

El Where de la select del tercer caso la estoy haciendo así:

Where IDProveedor = @IDProveedor and
FechaEntrada >= @FechaDesde and
FechaEntrada <= @FechaHasta

¿Tengo un modo mejor de solucionarlo que haciendo el if con las cuatro
ramas? Muchas gracias.
Respuesta Responder a este mensaje
#8 Carlos Sacristan
15/02/2010 - 12:10 | Informe spam
Además de lo que indica Miguel (está bien tenerte de nuevo por aquí), te
recomiendo la lectura de un artículo que trata justamente de tu problemática
y que ya es todo un clásico en la red:
http://www.sommarskog.se/dyn-search.html

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"Miguel Egea" wrote in message
news:
Where ( IDProveedor = @IDProveedor or @idProveedor is null ) and
( FechaEntrada >= @FechaDesde or @fechaDesde is null) and
( FechaEntrada <= @FechaHasta or @fechahasta is null)


El caso es que desde el punto de vista de rendimiento seria mejor hacer
al menos dos con un if, algo así

if not @idproveedor is null


Espero que ayude y no sea tarde

Saludos Cordiales
Miguel Egea
Solid Quality Mentos
http://www.portalsql.com

"Alberto" escribió en el mensaje de
noticias:
Estoy haciendo una consulta sencilla sobre una única tabla empleando un
procedimiento almacenado.

Solo intervienen tres parámetros: @IDProveedor (código de proveedor),
@FechaDesde y @FechaHasta. En la tabla tengo el código del proveedor y un
campo llamado FechaEntrada.

El problema es que se pueden hacer tres tipos de consultas:
- indicando solo el código del proveedor.
- indicando solo fecha desde y fecha hasta
- indicando código de proveedor y las fechas desde y fecha hasta.

En la cabecera del procedimiento almacenado declaro los parámetros así:
@IDProveedor smallint = NULL,
@FechaDesde smallDateTime = NULL,
@FechaHasta smallDateTime = NULL

Me pararece un poco fuerte hacer un if dentro del procedimiento con
cuatro ramas: tres para los casos que comentaba antes y otro para el caso
error (es decir, que vengan todos los parámetros con NULL).

El Where de la select del tercer caso la estoy haciendo así:

Where IDProveedor = @IDProveedor and
FechaEntrada >= @FechaDesde and
FechaEntrada <= @FechaHasta

¿Tengo un modo mejor de solucionarlo que haciendo el if con las cuatro
ramas? Muchas gracias.



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