我有此过程,但它不起作用..我不知道为什么。有什么想法我做错了吗?
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
答案 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
但是,也如上所述,不要在数据库中存储原始格式的密码。如果是,请更改设计。