[英]Return value based on count from SQL Server Stored Procedure
I have the following SQL Server Stored Procedure which validates a password. 我有以下验证密码的SQL Server存储过程。
ALTER PROC [dbo].[spValidatePassword]
@UserId uniqueidentifier,
@Password NVARCHAR(255)
AS
BEGIN
DECLARE @PasswordHash NVARCHAR(255) = HASHBYTES('SHA2_512', (SELECT @Password + CAST((SELECT p.PasswordSalt FROM Passwords p WHERE p.UserId = @UserId) AS NVARCHAR(255))))
SELECT COUNT(*)
from Passwords
WHERE UserId = @UserId
AND [Password] = @PasswordHash
--return 1 if valid password
--return 0 if not valid
END
How can I return 1 from the stored procedure if the count is greater than zero, and zero otherwise? 如果计数大于零,如何从存储过程中返回1,否则返回零?
Try this query, will return 1
if there is a result, else 0
尝试此查询,如果有结果将返回
1
,否则返回0
SELECT (CASE WHEN COUNT(*) > 1 THEN 1 ELSE 0 END)
FROM Passwords
WHERE UserId = @UserId
AND [Password] = @PasswordHash
ALTER PROC [dbo].[spValidatePassword]
@UserId uniqueidentifier,
@Password NVARCHAR(255)
AS
BEGIN
DECLARE @PasswordHash NVARCHAR(255) = HASHBYTES('SHA2_512', (SELECT @Password + CAST((SELECT p.PasswordSalt FROM Passwords p WHERE p.UserId = @UserId) AS NVARCHAR(255))))
SELECT
CASE WHEN EXISTS (
SELECT *
from Passwords
WHERE UserId = @UserId
AND [Password] = @PasswordHash
)
THEN 1
ELSE 0
END
--return 1 if valid password
--return 0 if not valid
END
But consider using some other authentication model like OAuth or Office 365 logins rather than reinventing the wheel 但是,请考虑使用其他身份验证模型(例如OAuth或Office 365登录名),而不是重新发明轮子
IF (SELECT COUNT(UserId) from Passwords WHERE UserId = @UserId AND [Password] = @PasswordHash) > 0
begin
return 1;
End
ELse
begin
return 0;
end
this query will return the required result 该查询将返回所需的结果
IF EXISTS (
SELECT *
from Passwords
WHERE UserId = @UserId
AND [Password] = @PasswordHash
)
RETURN 1;
ELSE
RETURN 0;
You can also use OUTPUT Type stored procedure to get a scalar (in your case either 1 or 0) result as: 您还可以使用OUTPUT Type存储过程来获取标量(在您的情况下为1或0)的结果为:
ALTER PROC [dbo].[spValidatePassword]
@UserId uniqueidentifier,
@Password NVARCHAR(255),
@result TINYINT OUTPUT
AS
BEGIN
DECLARE @PasswordHash NVARCHAR(255) = HASHBYTES('SHA2_512', (SELECT @Password + CAST((SELECT p.PasswordSalt FROM Passwords p WHERE p.UserId = @UserId) AS NVARCHAR(255))))
SELECT @result = COUNT(*)
from Passwords
WHERE UserId = @UserId
AND [Password] = @PasswordHash
END
You can execute this proc as: 您可以按以下方式执行此过程:
DECLARE @output TINYINT
EXEC [dbo].[spValidatePassword] @UserId= 'any user id',@Password = 'any password',@result = @output OUTPUT
PRINT @output
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.