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

#1 José Raúl Fenollar Martínez
20/10/2003 - 15:43 | Informe spam
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





Respuesta Responder a este mensaje
#2 Daniel Álvarez
20/10/2003 - 16:11 | Informe spam
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
>
>
>
>
>


Respuesta Responder a este mensaje
#3 José Raúl Fenollar Martínez
21/10/2003 - 09:16 | Informe spam
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
> >
> >
> >
> >
> >
>
>


Respuesta Responder a este mensaje
#4 Daniel Álvarez
21/10/2003 - 10:44 | Informe spam
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
> > >
> > >
> > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#5 Manuel \(Salamanca\)
21/10/2003 - 11:24 | Informe spam
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
> > > >
> > > >
> > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida