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)

Preguntas similare

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)


Respuesta Responder a este mensaje
#2 Jose Luis Bautista
16/02/2006 - 14:54 | Informe spam
Entonces en este caso, ¿debiera haberlo programado en la aplicacion, y no
haber usado procedimientos almacenados?

¿Existe alguna forma de hacer lo que quiero con procedimientos almacenados ?

"Maxi" escribió en el mensaje
news:%
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)






Respuesta Responder a este mensaje
#3 Jose Luis Bautista
16/02/2006 - 15:32 | Informe spam
Otra duda sobre esto

Cuando hago

'fecha= ' + @fecha + ' '

Me da error debido, creo yo, a que no incluye las comillas simples ' y '
Como puedo introducir las comillas simples en una cadena, he intentado
escapandolo con \', pero no ha sido posible.



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


Respuesta Responder a este mensaje
#4 Sergio Ortega
16/02/2006 - 23:49 | Informe spam
Para poner una comilla simple en una cadena, simplemente ponla doble:

' SELECT * FROM MI_TABLA WHERE FECHA > ''' + @FECHA + ''' '

Poniendo espacios entre ellas, para mejor visualización:

' SELECT * FROM MI_TABLA WHERE FECHA > ' ' ' + @FECHA + ' ' '
'

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