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

#1 Gustavo Cantero
08/02/2010 - 17:08 | Informe spam
Alberto:
No podrías simplemente hacer tres procedimientos? Si tu
respuesta es no, entonces creo que lo mejor sería hacer los IFs.
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


From: Alberto [mailto:]
Posted At: lunes, 08 de febrero de 2010 12:54 p.m.
Posted To: microsoft.public.es.sqlserver
Conversation: Consulta a través de procedimiento almacenado
Subject: Consulta a través de procedimiento almacenado

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
#2 Alberto
08/02/2010 - 17:20 | Informe spam
Gracias.
En este caso prefiero hacer un único procedimiento.
En la última rama del if, ¿cómo devuelvo un código de error desde el
procedimiento almacenado?

El 08/02/2010 17:08, Gustavo Cantero escribió:
Alberto:
No podrías simplemente hacer tres procedimientos? Si tu
respuesta es no, entonces creo que lo mejor sería hacer los IFs.
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


From: Alberto [mailto:]
Posted At: lunes, 08 de febrero de 2010 12:54 p.m.
Posted To: microsoft.public.es.sqlserver
Conversation: Consulta a través de procedimiento almacenado
Subject: Consulta a través de procedimiento almacenado

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
#3 Gustavo Cantero
08/02/2010 - 17:25 | Informe spam
Podrías hacer un "RETURN xxx", donde "xxx" es un entero que puedes leer
desde el código.
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


From: Alberto [mailto:]
Posted At: lunes, 08 de febrero de 2010 01:20 p.m.
Posted To: microsoft.public.es.sqlserver
Conversation: Consulta a través de procedimiento almacenado
Subject: Re: Consulta a través de procedimiento almacenado

Gracias.
En este caso prefiero hacer un único procedimiento.
En la última rama del if, ¿cómo devuelvo un código de error desde el
procedimiento almacenado?

El 08/02/2010 17:08, Gustavo Cantero escribió:
Alberto:
No podrías simplemente hacer tres procedimientos? Si tu
respuesta es no, entonces creo que lo mejor sería hacer los IFs.
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


From: Alberto [mailto:]
Posted At: lunes, 08 de febrero de 2010 12:54 p.m.
Posted To: microsoft.public.es.sqlserver
Conversation: Consulta a través de procedimiento almacenado
Subject: Consulta a través de procedimiento almacenado

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
#4 Patricio Poo V.
08/02/2010 - 22:32 | Informe spam
hola Alberto
tengo este codigo para componer sentencias cuando los campos a
considerar son variables.

DECLARE
@cueri as nvarchar(1000),
@parDefinition as nvarchar(1000),
@dtFechaDesde as varchar(08),
@dtFechaHasta as varchar(08),
@rc as int,
@n_ultimoSecuencial as numeric(20),
@sNombreTabla as varchar(20),
@dtFechaCorte as varchar(08)

SELECT @parDefinition = '@dtFechaDesde as varchar(08), ' +
'@dtFechaHasta as varchar(08), ' +
'@i_Tarjeta as varchar(19),' +
'@i_Rut as varchar(19),' +
'@i_IP as varchar(15),' +
'@i_Usuario as varchar(20),' +
'@n_ultimoSecuencial as numeric(20)',

@cueri = 'Select Top ' + convert(varchar,@numFilasPag) +
' secuencial, ' +
' FechaTx, FechaCortaTx, HoraTx, Emisor, logConsulta.Servicio,
NumeroTarjeta, ' +
'UsuarioEmisor, HeaderEntrada, DataEntrada, HeaderSalida,
DataSalida, ' +
'DemoraTx, IpOrigen, MessageId, Org_Usuario,' +
'Serv.Titulo as Detalle_Servicio, Serv.Tipo_Servicio ' +
' From ' + @sNombreTabla + ' as logConsulta (nolock) inner join
LOGMOL_servicios as Serv (nolock) ' +
' on logConsulta.servicio = Serv.servicio ' +
' Where FechaTx between @dtFechaDesde AND @dtFechaHasta '

if len(rtrim(ltrim(@i_Tarjeta))) <> 0
begin
select @cueri = @cueri + ' and NumeroTarjeta = @i_Tarjeta'
end

if len(rtrim(ltrim(@i_Rut))) <> 0
begin
select @cueri = @cueri + ' and NumeroTarjeta = @i_Rut'
end

if len(rtrim(ltrim(@i_IP))) <> 0
begin
select @cueri = @cueri + ' and IpOrigen = @i_IP'
end

if len(rtrim(ltrim(@i_Usuario))) <> 0
begin
select @cueri = @cueri + ' and UsuarioEmisor = @i_Usuario'
end
select @cueri = @cueri + ' and secuencial > @n_ultimoSecuencial'
select @cueri = @cueri + ' Order by FechaTx, HoraTx '

EXECUTE sp_executesql @cueri,
@parDefinition,
@dtFechaDesde,
@dtFechaHasta,
@i_Tarjeta,
@i_Rut,
@i_IP,
@i_Usuario,
@n_ultimoSecuencial
return 0





Alberto Escribió :
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.



salu2
PPoo
Respuesta Responder a este mensaje
#5 L. Garcia
09/02/2010 - 13:31 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida