none
procedimiento almacenado RRS feed

  • Pregunta

  • hola comunidad tengo la sgte. consulta

     

    alter PROCEDURE [dbo].[validarLogin]
    (
    @contraseña varchar(50)
    )
    AS
    BEGIN
    DECLARE
    @obtenerId int,
    @validar bit
    select @obtenerId=FH1 from CCFHVE1 where FH2 collate Latin1_General_CS_AS=@contraseña
    
    	IF(@obtenerId > 0)
    		BEGIN
    				SET @validar = 1;
    		END
    	ELSE
    		BEGIN
    				SET @validar = 0;
    		END	
    return @validar
    
    end
    

    ahora como lo hago para que me devuelva mas datos de ese registro que encuentra?

     

    Desde ya muchas gracias


    .::**~ No Use for A NamE ~**::.
    martes, 14 de diciembre de 2010 18:45

Respuestas


  • Hola,

    Primero no entiendo porque buscas en una base de datos por la contraseña simplemente,  si existen mas de 1 persona con la misma contraseña no controlaras nada de seguridad, ademas no es la forma correcta.

    Debes buscar la forma de enviar el nombre, id del usuario al procedimiento para validar con id y contraseña, así aseguras que sea de utilidad este procedimiento de validación de usuarios. Puedes utilizar algo como el modelo que indico aquí:


    CREATE PROCEDURE [dbo].[SP_VALIDA_USUARIOS]
    (
     @Id_o_Usuario VARCHAR(20),
     @Contraseña VARCHAR(30)
    )
    
    AS
    
    DECLARE 
    
    	@Resultado bit = 0, --Inicializa en Falso (0)
    	@obtenerId int
    
    IF EXISTS
    (
    
    SELECT *
    FROM CCFHVE1
    WHERE FH1 = @Id_o_Usuario 
    AND FH2 collate Latin1_General_CS_AS = @contraseña
    )
    
    BEGIN
    
      --Usuario Existe.
      
      Set @Resultado = 1
     
      /*
       En caso de que el usuario exista, aquí puedes ejecutar una consulta a la tabla y retornar
       los valores que quieras de la tabla CCFHVE1 o de cualquier otra. Por ejemplo:
       
       SELECT @Resultado, FH1, Nombre, ....
       FROM CCFHVE1
       WHERE FH1 = @Id_o_Usuario
       
       Y pones eso en lugar de SELECT @Resultado, y cuando recibas en tu aplicativo buscas que el
       indice 0 de la consulta, osea el primer valor es el valor de la validacion, lo demas los datos
      */
      
    	SELECT @Resultado;
    
    END
    
    
    ELSE
    
    BEGIN
    
      --Usuario No Existe
    
    	SELECT @Resultado;
    
    END


    Espero que  te sirva.

    Willy Taveras.-

    http://itlearn.net

    • Editado Willy TaverasModerator martes, 14 de diciembre de 2010 19:07 Formato de codigo.
    • Marcado como respuesta Pablokes miércoles, 15 de diciembre de 2010 12:29
    martes, 14 de diciembre de 2010 19:06
    Moderador

Todas las respuestas

  • Hola

    Puedes utilizar parámetros de salida. Por ejemplo

    Copy
    USE AdventureWorks2008R2;
    GO
    IF OBJECT_ID ( 'Production.uspGetList', 'P' ) IS NOT NULL 
      DROP PROCEDURE Production.uspGetList;
    GO
    CREATE PROCEDURE Production.uspGetList @Product varchar(40) 
      , @MaxPrice money 
      , @ComparePrice money OUTPUT
      , @ListPrice money OUT
    AS
      SET NOCOUNT ON;
      SELECT p.[Name] AS Product, p.ListPrice AS 'List Price'
      FROM Production.Product AS p
      JOIN Production.ProductSubcategory AS s 
       ON p.ProductSubcategoryID = s.ProductSubcategoryID
      WHERE s.[Name] LIKE @Product AND p.ListPrice < @MaxPrice;
    -- Populate the output variable @ListPprice.
    SET @ListPrice = (SELECT MAX(p.ListPrice)
        FROM Production.Product AS p
        JOIN Production.ProductSubcategory AS s 
         ON p.ProductSubcategoryID = s.ProductSubcategoryID
        WHERE s.[Name] LIKE @Product AND p.ListPrice < @MaxPrice);
    -- Populate the output variable @compareprice.
    SET @ComparePrice = @MaxPrice;
    GO
    

    Echa un ojo a la referencia aquí http://msdn.microsoft.com/en-us/library/ms187926.aspx

     


    Please vote/mark the answer if it was helpful!
    Por favor vota/marca la respuesta si te ha ayudado!
    http://bmegias.wordpress.com
    http://twitter.com/bmegias
    martes, 14 de diciembre de 2010 19:02
  • pero no hay alguna forma de que devuelva el registro con todos los campos  *
    .::**~ No Use for A NamE ~**::.
    martes, 14 de diciembre de 2010 19:03

  • Hola,

    Primero no entiendo porque buscas en una base de datos por la contraseña simplemente,  si existen mas de 1 persona con la misma contraseña no controlaras nada de seguridad, ademas no es la forma correcta.

    Debes buscar la forma de enviar el nombre, id del usuario al procedimiento para validar con id y contraseña, así aseguras que sea de utilidad este procedimiento de validación de usuarios. Puedes utilizar algo como el modelo que indico aquí:


    CREATE PROCEDURE [dbo].[SP_VALIDA_USUARIOS]
    (
     @Id_o_Usuario VARCHAR(20),
     @Contraseña VARCHAR(30)
    )
    
    AS
    
    DECLARE 
    
    	@Resultado bit = 0, --Inicializa en Falso (0)
    	@obtenerId int
    
    IF EXISTS
    (
    
    SELECT *
    FROM CCFHVE1
    WHERE FH1 = @Id_o_Usuario 
    AND FH2 collate Latin1_General_CS_AS = @contraseña
    )
    
    BEGIN
    
      --Usuario Existe.
      
      Set @Resultado = 1
     
      /*
       En caso de que el usuario exista, aquí puedes ejecutar una consulta a la tabla y retornar
       los valores que quieras de la tabla CCFHVE1 o de cualquier otra. Por ejemplo:
       
       SELECT @Resultado, FH1, Nombre, ....
       FROM CCFHVE1
       WHERE FH1 = @Id_o_Usuario
       
       Y pones eso en lugar de SELECT @Resultado, y cuando recibas en tu aplicativo buscas que el
       indice 0 de la consulta, osea el primer valor es el valor de la validacion, lo demas los datos
      */
      
    	SELECT @Resultado;
    
    END
    
    
    ELSE
    
    BEGIN
    
      --Usuario No Existe
    
    	SELECT @Resultado;
    
    END


    Espero que  te sirva.

    Willy Taveras.-

    http://itlearn.net

    • Editado Willy TaverasModerator martes, 14 de diciembre de 2010 19:07 Formato de codigo.
    • Marcado como respuesta Pablokes miércoles, 15 de diciembre de 2010 12:29
    martes, 14 de diciembre de 2010 19:06
    Moderador
  • Muchas gracias por responder !!!

     

    pero cual seria lo mas optimo de las 2 consulta que me han  planteado?

     

    por lo que veo la de willy tiene 2 select. en el mismo sp.

     

    si me pudieran orientar desde ya muchas gracias!


    .::**~ No Use for A NamE ~**::.
    martes, 14 de diciembre de 2010 19:17
  • La buena es la de Willy, lo que yo te puse era solo un ejemplo. Si me dices qué campos tienes en la tabla y cuales quieres recuperar te puedo poner la consulta completa.
    Please vote/mark the answer if it was helpful!
    Por favor vota/marca la respuesta si te ha ayudado!
    http://bmegias.wordpress.com
    http://twitter.com/bmegias
    martes, 14 de diciembre de 2010 20:33