Novato con Procedimientos Almacenados

20/10/2003 - 14:33 por Daniel Álvarez | Informe spam
Hola

Estoy bastante flojo en el tema de los procedimientos almacenados, estoy
creando una bastante simple y no se por que no me funciona. El caso es que
depende de si un valor que le pido tiene un dato mayor a 0 yo añado una
clausula a la consulta pero no me tira, o se pasa por el forro que tiene un
valor mayor que 0 o no añade la clausula no se que pasa. Yo no se si es que
igual es que no es asi como se programan procedimiento almacenados, igual es
que estoy con la ide equivocada, no se, como he dicho yo en procedimientos
toy muy flojo:

CREATE PROCEDURE cuadro
@licencia int,
@casa int
AS
declare @cadena char(300)
set @cadena = 'select a.id,a.nombre,b.numhabitacion from cabañas as a inner
join habitaciones as b on (a.id=b.cabaña and a.licencia=b.licencia) where
a.licencia=' + cast(@licencia as varchar)
if (@casa>0)
begin
set @cadena = @cadena + 'and a.cabaña=1'
end
EXEC (@cadena)
GO

Gracias.


Daniel Álvarez

Preguntas similare

Leer las respuestas

#6 Daniel Álvarez
21/10/2003 - 11:35 | Informe spam
Justo, era eso. Muchas gracias Manuel y ati también José por vuestra ayuda.


Daniel Álvarez




"Manuel (Salamanca)" escribió en el mensaje
news:
Hola,
prueba a definir tu variable de cadena como tipo varchar, ya que al
definirla char, te rellena con espacios a la derecha y no te deja añadir


mas
caracteres. Tendrias que borrar los espacios y luego añadir la condicion


que
tienes dentro del if.

Un saludo...



"Daniel Álvarez" escribió en el mensaje
news:eRq8J%
> Lo he separado como me has dicho y nada, he puesto un print (@cadena)


para
> ver que me devolvia y me ha puesto toda la select excepto la ultima
clausula
> ( and a.cabaña=1). Lo cual me ha echo pensar que no se estaba metiendo


en
> ese if, asi que he puesto un print "entro" en ese if y al ejecutar el
> procedimiento si me ha puesto entro. Asi que ni idea. Me estoy empezando


a
> desesperar ya jajaja.
>
>
> Daniel Álvarez
>
>
>
>
> "José Raúl Fenollar Martínez" escribió en el mensaje
> news:%
> > set @cadena = @cadena + 'and a.cabaña=1'
> > en esta sentencia, cambiala por
> >
> > set @cadena = @cadena + ' and a.cabaña=1'
> > poniendo un espacio delente de and para que no te quede lo siguiente:
> >
> > a.licencia=3and a.cabaña=1
> >
> >
> >
> > "Daniel Álvarez" wrote in message
> > news:#fH#
> > > Gracias José pero no, lo he cambiado tal y como me has dicho y sigue
sin
> > > hacerlo. ¿alguna idea mas?
> > >
> > > Daniel Álvarez
> > >
> > >
> > >
> > >
> > > "José Raúl Fenollar Martínez" escribió en el
mensaje
> > > news:%
> > > > prueba cambiando el cast(@licencia as varchar) a cast(@licencia as
> > > > varchar(10)) por ejemplo y dinos.
> > > >
> > > >
> > > >
> > > > CREATE PROCEDURE cuadro
> > > > @licencia int,
> > > > @casa int
> > > > AS
> > > > declare @cadena char(300)
> > > > set @cadena = 'select a.id,a.nombre,b.numhabitacion from cabañas


as
a
> > > inner
> > > > join habitaciones as b on (a.id=b.cabaña and


a.licencia=b.licencia)
> > where
> > > > a.licencia=' + cast(@licencia as varchar(10))
> > > > if (@casa>0)
> > > > begin
> > > > set @cadena = @cadena + 'and a.cabaña=1'
> > > > end
> > > > EXEC (@cadena)
> > > > GO
> > > >
> > > >
> > > > "Daniel Álvarez" wrote in message
> > > > news:
> > > > > Hola
> > > > >
> > > > > Estoy bastante flojo en el tema de los procedimientos
> almacenados,
> > > > estoy
> > > > > creando una bastante simple y no se por que no me funciona. El
caso
> es
> > > que
> > > > > depende de si un valor que le pido tiene un dato mayor a 0 yo
añado
> > una
> > > > > clausula a la consulta pero no me tira, o se pasa por el forro


que
> > tiene
> > > > un
> > > > > valor mayor que 0 o no añade la clausula no se que pasa. Yo no


se
si
> > es
> > > > que
> > > > > igual es que no es asi como se programan procedimiento
almacenados,
> > > igual
> > > > es
> > > > > que estoy con la ide equivocada, no se, como he dicho yo en
> > > procedimientos
> > > > > toy muy flojo:
> > > > >
> > > > > CREATE PROCEDURE cuadro
> > > > > @licencia int,
> > > > > @casa int
> > > > > AS
> > > > > declare @cadena char(300)
> > > > > set @cadena = 'select a.id,a.nombre,b.numhabitacion from cabañas
as
> a
> > > > inner
> > > > > join habitaciones as b on (a.id=b.cabaña and
a.licencia=b.licencia)
> > > where
> > > > > a.licencia=' + cast(@licencia as varchar)
> > > > > if (@casa>0)
> > > > > begin
> > > > > set @cadena = @cadena + 'and a.cabaña=1'
> > > > > end
> > > > > EXEC (@cadena)
> > > > > GO
> > > > >
> > > > > Gracias.
> > > > >
> > > > >
> > > > > Daniel Álvarez
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


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