2013-06-02 55 views
0

我有一个表Users有以下的列:T-SQL存储过程

Userid Username Password 
    1  Username1 Password1 
    2  Username2 Password2 
    3  Username3 Password3 

还有一个表,MappingRoles

Userid RoleId 
    1  1 (FinanceUser) 
    1  2 (Agent) 
    1  3 (Client) 

我想写一个存储过程,而应返回两个列

IsValidUser 
Roles -- of the user 

这是我的尝试:

CREATE PROCEDURE getRoles 
    @Username varchar(50), 
    @Password varchar(50) 
AS 
BEGIN 
    Select * from Users as x inner join MappingRoles as y 
    on x.Userid=y.Userid 
    where x.Userid=(Select Userid from Users 
     where UserName='Username1' and Password='Password1'); 
END 
GO 

我在此查询期待优化提供2个返回值:

  • IsUserAuthenticated - (内SelectUsers

  • 如果它存在,那么所有的值。

任何建议将不胜感激。

+0

感谢您的答复马克,这只是样品领域。它在实际的表TripleDES中加密。 –

+0

正如我理解你的问题,一个典型的结果是像'(1,'代理,客户端')',是否正确?在返回值的例子中不应该是'选择RoleId'吗? – HABO

+0

嗨HABO,目前这个sp将返回3行 - –

回答

1

尝试一个简单的加入,删除子查询:

CREATE PROCEDURE getRoles 
    @Username varchar(50), 
    @Password varchar(50) 
AS 
BEGIN 
    Select 
     * 
    from Users as us 
    inner join MappingRoles mr 
    on us.Userid=mr.Userid 
    where [email protected] and [email protected]); 
END 
GO 
+0

OP可能打算'where [email protected]和us.Password = @ Password'。 –

+0

谢谢@Andrew Morton,按照你的建议更正了 –

+0

谢谢!我很感激。 –