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

Variable Interna Procedimientos Almacenados

Estas en el tema de Variable Interna Procedimientos Almacenados en el foro de SQL Server en Foros del Web. Hola compañeros, he visto que en los procedimientos almacenados se pueden crear condiciones (sentencias IF) tomando en cuenta el valor de un parámetro que se ...
  #1 (permalink)  
Antiguo 09/10/2007, 07:00
Avatar de ftabilo  
Fecha de Ingreso: junio-2007
Ubicación: En el Pc
Mensajes: 139
Antigüedad: 16 años, 10 meses
Puntos: 3
Variable Interna Procedimientos Almacenados

Hola compañeros, he visto que en los procedimientos almacenados se pueden crear condiciones (sentencias IF) tomando en cuenta el valor de un parámetro que se pasa cuando se llama al procedimiento, es decir en base al valor de un parametro, se pueden ejecutar consultas.

Ahora, Tengo una consulta que en base a el valor de un parametro, me devuelve un solo dato (el valor de un solo campo, en la fila que coincida con el parámetro).

Necesito saber si es posible, implementar la consulta que describo anteriormente en un procedimiento almacenado y asignar el dato que me devuelve la consulta a una variable interna del procedimiento, y en base a esa variable tomar decisiones.

He buscado informacion, pero el Administrador Corporativo me dice siempre que la sintaxis no es correcta al definir una variable.

Espero me hayan entendido y me puedan ayudar.

Saludos !!!
  #2 (permalink)  
Antiguo 09/10/2007, 07:17
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: Variable Interna Procedimientos Almacenados

Si se puede.

Si publicas el codigo en donde marca el error, te podran ayudar mas rapido.

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 09/10/2007, 08:00
Avatar de ftabilo  
Fecha de Ingreso: junio-2007
Ubicación: En el Pc
Mensajes: 139
Antigüedad: 16 años, 10 meses
Puntos: 3
Re: Variable Interna Procedimientos Almacenados

Hola:

Gracias Andres95, Acabo de solucionar mi duda, expongo la solución por si acaso a alguien le pueda servir:

CREATE PROCEDURE [Buscar_Solicitud]
@IdUsuario int,
@IdSol int

AS
BEGIN

DECLARE
@TIPO Int
SET @TIPO = (Select Tipo From Solicitudes Where IdUsuario = @IdUsuario And IdSolicitud = @IdSol)

IF @Tipo = '1' OR @Tipo = NULL
BEGIN
-- Aqui ejecutan lo que corresponda a este caso
END
ELSE
BEGIN
-- Aqui ejecutan lo que corresponda a este caso
END

END
GO
  #4 (permalink)  
Antiguo 09/10/2007, 08:38
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: Variable Interna Procedimientos Almacenados

Solo como comentario, no puedes comparar contra nulo... (algo = null)
pero puedes utilizar la sentencia (algo is null), o la funcion isnull(algo,[valor regresado en caso de que algo sea nulo])

En tu ejemplo, podria quedar como sigue:

Código:
CREATE PROCEDURE [Buscar_Solicitud] 
@IdUsuario int,
@IdSol int
AS

IF isnull((Select Tipo 
            From Solicitudes 
            Where IdUsuario = @IdUsuario And IdSolicitud = @IdSol), '1') = '1'
BEGIN
-- Aqui ejecutan lo que corresponda a este caso
END
ELSE
BEGIN
-- Aqui ejecutan lo que corresponda a este caso
END


GO
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #5 (permalink)  
Antiguo 09/10/2007, 08:46
Avatar de ftabilo  
Fecha de Ingreso: junio-2007
Ubicación: En el Pc
Mensajes: 139
Antigüedad: 16 años, 10 meses
Puntos: 3
Re: Variable Interna Procedimientos Almacenados

Gracias de nuevo Andres95, pasa que para los valores 1 y NULL necesito hacer lo mismo, que bueno que me has comunicado esto, o mi procedimiento hubiera dado un error.

Te agradezco la ayuda, Saludos.
  #6 (permalink)  
Antiguo 09/10/2007, 08:59
Avatar de ftabilo  
Fecha de Ingreso: junio-2007
Ubicación: En el Pc
Mensajes: 139
Antigüedad: 16 años, 10 meses
Puntos: 3
Re: Variable Interna Procedimientos Almacenados

Usando mi procedimiento original, consulte por un registro que contiene un valor NULL, y el procedimento me devolvio los resultados esperados.

Que ventajas tiene hacer lo que propones Andres95?

Gracias de Nuevo.
  #7 (permalink)  
Antiguo 09/10/2007, 09:47
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: Variable Interna Procedimientos Almacenados

Solo es para prevenir el mal funcionamiento de comprar contra nulo.

En teoria no es posible compara contra nulo, pero si tu dices que si funciona, adelante.

Te anexo un ejemplo muy sencillo de lo que menciono...

Código:
declare @miVariable varchar(5)


set @miVariable = null

if @miVariable = null
begin
   print 'si es nula'
end
else
begin
   print 'no es nula'
end

if @miVariable is  null
begin
   print 'si es nula'
end
else
begin
   print 'no es nula'
end
Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #8 (permalink)  
Antiguo 10/10/2007, 18:25
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 4 meses
Puntos: 6
Re: Variable Interna Procedimientos Almacenados

Entiendo que es posible si seteas el parametro Set Ansi Nulls.... pero no estoy seguro....



Saludos!
__________________
Hicimos un pacto con Dios... El no desarrolla Sistemas y nosotros no hacemos milagros....
  #9 (permalink)  
Antiguo 11/10/2007, 08:27
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: Variable Interna Procedimientos Almacenados

Tienes razon Gabo... apagando Ansi nulls funciona la comparacion...

Gracias!

Código:
set ansi_nulls off

declare @miVariable varchar(5)


set @miVariable = null

if @miVariable = null
begin
   print 'si es nula'
end
else
begin
   print 'no es nula'
end

if @miVariable is  null
begin
   print 'si es nula'
end
else
begin
   print 'no es nula'
end


set ansi_nulls on




set @miVariable = null

if @miVariable = null
begin
   print 'si es nula'
end
else
begin
   print 'no es nula'
end

if @miVariable is  null
begin
   print 'si es nula'
end
else
begin
   print 'no es nula'
end
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
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.
Tema Cerrado

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 11:26.