我在编写存储过程时遇到问题,该存储过程首先根据用户提供的密码检查散列密码(也是哈希)。如果密码与过程匹配,则会将密码更改为用户在存储之前进行哈希处理所提供的新密码。我对它进行了一次尝试,然后看到下面的代码,似乎完全没有正确的语法。任何可以提供的帮助将非常感激。有问题的代码如下:
Create Proc UserChangePassword
@pGuid varchar(50),
@pOldPassword varchar(100),
@pHashedPassword varchar (100),
@pNewPassword varchar(10)
AS
set @pHashedPassword = HASHBYTES('md5', @pOldPassword)
set @pOldPassword as select st01Password from st01UserData where @pGuid = st01GUID
If ( @pOldPassword = @pHashedPassword)
Begin
Update st01UserData (
set st01Password = HASHBYTES('md5', @pNewPassword))
where st01GUID = @pGuid
Return 'SUCCESS'
Else
RETURN 'FAILED'
GO
答案 0 :(得分:6)
您的问题背后的一些原因:
@pHashedPassword
,如果您只是盲目地将其设置为您的程序的第一行?set @variable AS SELECT ...
不是有效的T-SQL语法。BEGIN
没有匹配的END
。UPDATE table (
也无效。RETURN
字符串,只能INT
。试试这个版本:
CREATE PROCEDURE dbo.UserChangePassword
@pGuid VARCHAR(50),
@pOldPassword VARCHAR(100),
@pNewPassword VARCHAR(10)
AS
BEGIN
SET NOCOUNT ON;
UPDATE dbo.st01UserData
SET st01Password = HASHBYTES('md5', @pNewPassword)
WHERE st01Guid = @pGuid
AND st01Password = HASHBYTES('md5', @pOldPassword);
IF @@ROWCOUNT = 0
RETURN -1;
RETURN 0;
END
GO