选择是否存在否则选择0是否查询两次?

时间:2012-05-31 14:22:08

标签: sql

我正在进行这样的密码验证查询。

if exists(select UserID from users where UserName=@UserName and Password=@Password) 
    select UserID from users where UserName=@UserName and Password=@Password
else 
    select 0

但在我看来,我正在查询一次结果 我可以这样做吗

Select UserID Where Username = @UserName and Password = @Password

当我得到我的结果时,只需检查读者的结果数量?

if (!myReader.HasRows)
    MessageBox.Show("UserName not found or Password invalid");
else
    //do login stuff

猜猜我在问什么,哪个更好,还是一样?

1 个答案:

答案 0 :(得分:4)

使用此:

SELECT  ISNULL
        (
        (
        SELECT  userId
        FROM    users
        WHERE   userName = @userName
                AND password = @password
        ),
        0
        )

检查记录数量的解决方案当然也会有用。

请注意,如果userName不唯一并且有@userName的重复项,它将始终只返回一条记录,并且会失败。

正如@Andriy M所指出的那样,COALESCE在这里没有帮助,因为它被内部重写为容易出现同样问题的CASE

回答您的问题:是的,原始批次将访问users两次。

相关问题