Consulta de procedimientos almacenados de un novato

16/02/2006 - 01:23 por Jose Luis Bautista | Informe spam
Hola, estoy comenzando programar procediumientos almacenados

En particular, uno, para hacer una busqueda, me gustaria que refiera una
seria de paramentros, y si no lo recibe por defecto tienen el valor nulo,
despues si tienen o no el valor nulo influyen o no en la busqueda.

Tambien me gustaria que recibiera un parametro extra, por cada campo
numerico o de fecha, por ejemplo @cantidadModo, siendo modo (-1 menor que la
cantidad indicada, 0 igual, 1 mayor y si es 2, quiere decir que esta entre
dos cantidades) , de manera que no solo buscara numeros exactos

He hehco el siguiente procedimietno

queria saber si la forma que he hecho es la mas correcta, o hay otras formas
(para este problema que imagino es muy comun) de realizar esto

Gracias
CREATE PROCEDURE [dbo].[bancoSelectMovimientos]
@fechaModo int=0,
@fecha datetime=null,
@fecha2 datetime=null,
@tipo char(256)=null,
@concepto char(256)=null,
@notas text=null,
@cantidadModo int=0,
@cantidad money=null,
@cantidad2 money=null,
@banco char(256)=null

AS

declare @select sysname
set @select=''
if (@fecha is not null)
begin
set @select= @select + case @fechaModo
when -1 then 'fecha < ' + @fecha + ' '
when 0 then 'fecha= ' + @fecha + ' '
when 1 then 'fecha > ' + @fecha + ' '
when 2 then 'fecha beetwen ' + @fecha+ ' and ' + @fecha2 + ' '
end
end

if (@cantidad is not null)
begin
set @select= @select + case @cantidadModo
when -1 then 'cantidad < ' + cast(@cantidad as sysname) + ' '
when 0 then 'cantidad=' + cast(@cantidad as sysname) + ' '
when 1 then 'cantidad >' + cast(@cantidad as sysname) + ' '
when 2 then 'cantidad beetwen '+ cast(@cantidad as sysname) +' and ' +
cast(@cantidad2 as sysname) + ' '
end
end

if (@tipo is not null) set @select=@select + 'tipo like %' + @tipo + '% '
if (@concepto is not null) set @select=@select + '@concepto like %' +
@concepto + '% '
if (@notas is not null) set @select=@select + 'notas like %' + CAST(@notas
as sysname) + '% '
if (@banco is not null) set @select=@select + 'banco like %' + @banco + '% '

if (@select='')
set @select='Select * from BancoMovimiento'
else
set @select='Select * from BancoMovimiento where ' + @select

exec (@select)
 

Leer las respuestas

#1 Maxi
16/02/2006 - 13:00 | Informe spam
Hola, esa es una forma pero estas usando SQLdinamico y deberas saber que no
es para nada bueno. A ver, si quieres algo tan pero tan dinamico lo mejor en
mi experiencia es sacarlo del Sp's y armalo desde la aplicacion


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Jose Luis Bautista" escribió en el
mensaje news:%
Hola, estoy comenzando programar procediumientos almacenados

En particular, uno, para hacer una busqueda, me gustaria que refiera una
seria de paramentros, y si no lo recibe por defecto tienen el valor nulo,
despues si tienen o no el valor nulo influyen o no en la busqueda.

Tambien me gustaria que recibiera un parametro extra, por cada campo
numerico o de fecha, por ejemplo @cantidadModo, siendo modo (-1 menor que
la cantidad indicada, 0 igual, 1 mayor y si es 2, quiere decir que esta
entre dos cantidades) , de manera que no solo buscara numeros exactos

He hehco el siguiente procedimietno

queria saber si la forma que he hecho es la mas correcta, o hay otras
formas (para este problema que imagino es muy comun) de realizar esto

Gracias
CREATE PROCEDURE [dbo].[bancoSelectMovimientos]
@fechaModo int=0,
@fecha datetime=null,
@fecha2 datetime=null,
@tipo char(256)=null,
@concepto char(256)=null,
@notas text=null,
@cantidadModo int=0,
@cantidad money=null,
@cantidad2 money=null,
@banco char(256)=null

AS

declare @select sysname
set @select=''
if (@fecha is not null)
begin
set @select= @select + case @fechaModo
when -1 then 'fecha < ' + @fecha + ' '
when 0 then 'fecha= ' + @fecha + ' '
when 1 then 'fecha > ' + @fecha + ' '
when 2 then 'fecha beetwen ' + @fecha+ ' and ' + @fecha2 + ' '
end
end

if (@cantidad is not null)
begin
set @select= @select + case @cantidadModo
when -1 then 'cantidad < ' + cast(@cantidad as sysname) + ' '
when 0 then 'cantidad=' + cast(@cantidad as sysname) + ' '
when 1 then 'cantidad >' + cast(@cantidad as sysname) + ' '
when 2 then 'cantidad beetwen '+ cast(@cantidad as sysname) +' and ' +
cast(@cantidad2 as sysname) + ' '
end
end

if (@tipo is not null) set @select=@select + 'tipo like %' + @tipo + '% '
if (@concepto is not null) set @select=@select + '@concepto like %' +
@concepto + '% '
if (@notas is not null) set @select=@select + 'notas like %' + CAST(@notas
as sysname) + '% '
if (@banco is not null) set @select=@select + 'banco like %' + @banco + '%
'

if (@select='')
set @select='Select * from BancoMovimiento'
else
set @select='Select * from BancoMovimiento where ' + @select

exec (@select)


Preguntas similares