我正在进行这样的密码验证查询。
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
猜猜我在问什么,哪个更好,还是一样?
答案 0 :(得分:4)
使用此:
SELECT ISNULL
(
(
SELECT userId
FROM users
WHERE userName = @userName
AND password = @password
),
0
)
检查记录数量的解决方案当然也会有用。
请注意,如果userName
不唯一并且有@userName
的重复项,它将始终只返回一条记录,并且会失败。
正如@Andriy M所指出的那样,COALESCE
在这里没有帮助,因为它被内部重写为容易出现同样问题的CASE
。
回答您的问题:是的,原始批次将访问users
两次。