Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Error en procedimiento almacenado

Estas en el tema de Error en procedimiento almacenado en el foro de SQL Server en Foros del Web. Hola a todos. Estoy haciendo una aplicacion web. Normalmente hago procedimientos almacenados, pero nunca habia hecho uno con una condicion IF dentro de el. Me ...
  #1 (permalink)  
Antiguo 19/07/2011, 19:00
 
Fecha de Ingreso: febrero-2009
Mensajes: 472
Antigüedad: 15 años, 1 mes
Puntos: 14
Error en procedimiento almacenado

Hola a todos. Estoy haciendo una aplicacion web. Normalmente hago procedimientos almacenados, pero nunca habia hecho uno con una condicion IF dentro de el. Me ahorraria mucho trabajo cuando lo consiga.
Este es el codigo de mi procedimiento almacenado.

Código SQL:
Ver original
  1. CREATE PROCEDURE dbo.procSelectGeneral
  2.     DECLARE @condiciones AS VARCHAR(200),
  3.     @campos AS VARCHAR(300),
  4.     @tabla AS VARCHAR(50)
  5.        
  6. IF @condiciones=''
  7.  BEGIN
  8.     SELECT @campos
  9.     FROM @tabla
  10.  END
  11. ELSE
  12.  BEGIN
  13.     SELECT @campos
  14.     FROM @tabla
  15.     WHERE @condiciones
  16.  END

Y me da el siguiente error.
Sintaxis incorrecta cerca de la palabra clave 'DECLARE'.
Se especificó una expresion no booleana en un contexto donde se esperaba una condicion, cerca de 'END'


Espero que alguien me pueda ayudar. Seguro que el error es o una tonteria o un fallo enorme por mi parte, pero es la primera vez que hago un procedimiento almacenado de este tipo.

Muchas gracias a todos por adelantado

Un saludo
Pinty
  #2 (permalink)  
Antiguo 19/07/2011, 19:23
Avatar de Joch_pa  
Fecha de Ingreso: octubre-2009
Ubicación: Pachuca De Soto, Hidalgo, Mexico, Mexico
Mensajes: 122
Antigüedad: 14 años, 5 meses
Puntos: 7
Respuesta: Error en procedimiento almacenado

ok... seria ALGO asi?

Código SQL:
Ver original
  1. CREATE PROCEDURE dbo.procSelectGeneral
  2.     @condiciones AS VARCHAR(200)
  3.     , @campos AS VARCHAR(300)
  4.     , @tabla AS VARCHAR(50)
  5. AS
  6.     IF @condiciones=''
  7.     BEGIN
  8.         SELECT @campos
  9.         FROM @tabla
  10.     END
  11.     ELSE
  12.     BEGIN
  13.         SELECT @campos
  14.         FROM @tabla
  15.     WHERE @condiciones
  16.     END
  17. GO

Pero tengo mis reservas a que te funcine, pues @tabla es una variable, no una tabla

Lo modifique de la siguiente forma, prueba ambas.



Código SQL:
Ver original
  1. CREATE PROCEDURE dbo.procSelectGeneral
  2.     @condiciones AS VARCHAR(200)
  3.     , @campos AS VARCHAR(300)
  4.     , @tabla AS VARCHAR(50)
  5. AS
  6.     DECLARE @str VARCHAR(8000)
  7.     SET @str = 'SELECT '+ @campos +' FROM '+@tabla
  8.     IF @condiciones<>''
  9.     BEGIN
  10.         SET @str = @str + ' WHERE ' @condiciones
  11.     END
  12.     EXEC(@str)
  13. GO
  #3 (permalink)  
Antiguo 20/07/2011, 08:13
 
Fecha de Ingreso: febrero-2009
Mensajes: 472
Antigüedad: 15 años, 1 mes
Puntos: 14
Respuesta: Error en procedimiento almacenado

Hola Joch_pa. En primer lugar muchas gracias por contestar, y por prestarme tu ayuda. He provado el codigo que me propones (el segundo caso), pero me da el siguiente error:
"Sintaxis incorrecto cerca de '@condiciones'"

Alguna sugerencia??
Muchas gracias nuevamente

Un saludo
Pinty
  #4 (permalink)  
Antiguo 20/07/2011, 09:19
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 7 meses
Puntos: 774
Respuesta: Error en procedimiento almacenado

Código SQL:
Ver original
  1. CREATE PROCEDURE dbo.procSelectGeneral
  2.         (@condiciones AS VARCHAR(200)
  3.         , @campos AS VARCHAR(300)
  4.         , @tabla AS VARCHAR(50) )
  5.     AS
  6.    BEGIN
  7.         DECLARE @str VARCHAR(8000)
  8.         SET @str = 'SELECT '+ @campos +' FROM '+@tabla
  9.         IF @condiciones<>''
  10.         BEGIN
  11.             SET @str = @str + ' WHERE ' @condiciones
  12.         END
  13.         EXEC(@str)
  14.     END
  15.     GO

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 28/07/2011, 01:12
Avatar de Joch_pa  
Fecha de Ingreso: octubre-2009
Ubicación: Pachuca De Soto, Hidalgo, Mexico, Mexico
Mensajes: 122
Antigüedad: 14 años, 5 meses
Puntos: 7
Respuesta: Error en procedimiento almacenado

ah tambien falta un simbolo mas en la linea
SET @str = @str + ' WHERE ' @condiciones

cambiarla por
SET @str = @str + ' WHERE ' + @condiciones
  #6 (permalink)  
Antiguo 06/08/2011, 17:13
 
Fecha de Ingreso: febrero-2009
Mensajes: 472
Antigüedad: 15 años, 1 mes
Puntos: 14
Respuesta: Error en procedimiento almacenado

Hola a todos. Muchas gracias por vuestra ayuda, ya este todo solucionado, me funciona todo perfectamente.

Gracias de nuevo a todos.
Un saludo
Pinty
  #7 (permalink)  
Antiguo 08/08/2011, 09:13
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 8 meses
Puntos: 180
Respuesta: Error en procedimiento almacenado

Una observacion, a TODOS los usuarios que ejecuten este procdimiento, vas a tener que otorgarles permisos de SELECT sobre tus tablas en cuestion.
__________________
MCTS Isaias Islas
  #8 (permalink)  
Antiguo 08/08/2011, 15:10
 
Fecha de Ingreso: febrero-2009
Mensajes: 472
Antigüedad: 15 años, 1 mes
Puntos: 14
Respuesta: Error en procedimiento almacenado

A mi me funciono, quizas ya haya dado los permisos select a las tablas en algun procedimiento anterior, por que me funciono perfectamente, bueno tanto programar ya me afecta y no se que permisos doy a quien jejeje.
Un saludo a todos
Pinty

Etiquetas: procedimiento, select, tabla, almacenar, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:59.