2014-06-14 55 views
0

我尝试创建MS-SQL的程序查询我的比赛,但林还挺stucked ..创建一个SQL过程

比方说, 我有一个用户名和密码行的数据库。 我使用过程查询来选择用户名和密码。现在

ALTER PROCEDURE [dbo].[AccountAuth] /* Procedure Name. */ 
    @m_szUserID varchar(20), 
     @m_szUserPW varchar(50) 
AS 

    SET NOCOUNT ON; 

DECLARE @m_nResultCode int 
select @m_nResultCode = 100 

BEGIN 
SELECT @m_szUserID = username, @m_szUserPW = password 
FROM account 
WHERE username = @m_szUserID; 



END 

我的问题: 如果一切是正确的,则该过程将输出的“结果码”

我如何调用该过程查询

BEGIN_DECLARE_SQLUNIT(SP_AccountSelect, "{ call AccountAuth(?,?) }") 
    BEGIN_VARIABLE() 
     char m_szUserID[MAX_SIZE_USER_ID + 1]; 
     char m_szUserPW[MAX_SIZE_USER_ID + 1]; 
     int  m_nResultCode; 
    END_VARIABLE() 
    BEGIN_PARAM(3) 
     PARAM_ENTRY_STR(SQL_PARAM_INPUT, m_szUserID) 
     PARAM_ENTRY_STR(SQL_PARAM_INPUT, m_szUserPW) 
     PARAM_ENTRY(SQL_PARAM_OUTPUT, m_nResultCode)  
    END_PARAM() 
END_DECLARE_SQLUNIT() 

过程我到现在是我不知道我如何使IFS像检查用户名是否正确,如果密码是正确的..因为我总是必须做出不同的结果代码。登录错误=结果代码100,错误的用户名= 101,错误的密码= 102 ..

即时搜索小时,但我无法找到任何有用的东西。 有谁知道一个链接,我可以找到有用的东西?

回答

0

这是您可以为登录呼叫编写的最基本的程序,但在实际应用中,您需要检查登录内容,但可能已禁用,删除,未登录一段时间,并且无法登录。您可以添加尽可能多的检查项目,以确保只有授权人员才能访问。

尝试这样的事情.....

ALTER PROCEDURE [dbo].[AccountAuth] /* Procedure Name. */ 
    @m_szUserID varchar(20), 
    @m_szUserPW varchar(50), 
    @m_nResultCode int OUTPUT 
AS 
BEGIN 
    SET NOCOUNT ON; 
    DECLARE @Password varchar(50); 

    IF EXISTS(SELECT 1 FROM account WHERE username = @m_szUserID) 
     BEGIN 
      SELECT @Password = [password] 
      FROM account 
      WHERE username = @m_szUserID; 

       IF (@Password = @m_szUserPW) 
        BEGIN 
         SET @m_nResultCode = 1; -- 1 for successful login 
        END 
       ELSE 
        BEGIN 
         SET @m_nResultCode = 0; -- 0 for Unsuccessful login 
        END 
     END 
    ELSE 
    BEGIN 
     SET @m_nResultCode = 2; -- 2 if User Name does not exists 

    END 
END 

调用存储过程

DECLARE @OUT_Result INT; 

EXECUTE [dbo].[AccountAuth] @m_szUserID  = 'UserName' 
          ,@m_szUserPW = '123456' 
          ,@m_nResultCode = @OUT_Result OUTPUT 

-- Now do what ever you need to do with @OUT_Result variable. 
+0

SELECT 1 FROM < - 是1只选择1行? – user3733748

+0

不,它是选择1,因为我使用'Exists'运算符并且存在运算符只返回True/False,如果它找到一个具有通过用户名的行,它将选择1并且存在运算符返回true,当没有行时返回select返回无并且存在运算符返回Null,您将永远不会进入IF块,而是转到ELSE块并返回代码以指示用户名不存在。我希望这有助于,谢谢。 –