存储过程不起作用

时间:2018-08-02 14:22:27

标签: sql-server stored-procedures

我有此过程,但它不起作用..我不知道为什么。有什么想法我做错了吗?

CREATE PROCEDURE [dbo].[spCheckLogin]  
  (  @Username varchar(30),
     @Password varchar(15))  
AS  
BEGIN  
  Declare 
     @Result int = 0;

IF (@Password=(SELECT password from users where Username=@Username)) 

   set @Result=1 

   ELSE  

   set   @Result=0

   return @Result
END  
GO

3 个答案:

答案 0 :(得分:1)

您使用的比较不正确。应该是这样的:

IF EXISTS (SELECT 1 from users where Username=@Username AND password = @password) 

还请注意,以纯文本格式存储密码不是一个好习惯。建议阅读:Why are plain text passwords bad, and how do I convince my boss that his treasured websites are in jeopardy?

答案 1 :(得分:0)

您希望使用输出值而不是返回值。但是,返回值是整数类型,因此可能对您有用。

您永远都不想使用存储的普通密码,但是我认为您只是出于对业余项目的测试目的而这样做。

CREATE PROCEDURE [dbo].[spCheckLogin]  
  (  @Username varchar(30),
     @Password varchar(15))  
AS  
BEGIN  
  Declare @Result int = case 
        when exists (SELECT * 
          from users 
          where Username=@Username and password = @Password)) 
        THEN 1 
        ELSE 0
   END
   return @Result
END  
GO

答案 2 :(得分:0)

就像被提及一样,请使用OUTPUT参数:

CREATE PROC [dbo].[spCheckLogin] @Username varchar(30),
                                 @Password varchar(30),
                                 @Success bit OUTPUT
AS
BEGIN

    IF EXISTS (SELECT 1
               FROM users
               WHERE Username = @Username
                 AND Password = @Password)
    BEGIN
        SET @Success = 1;
    END
    ELSE
    BEGIN
        SET @Success = 0;
    END

END

但是,也如上所述,不要在数据库中存储原始格式的密码。如果是,请更改设计

相关问题