Как использовать ISNULL и HASHBYTES в одном запросе? - PullRequest
0 голосов
/ 06 апреля 2019

Я использую команду ISNULL в процедуре SQL Server UPDATE, и я использую хэш-пароль пароля

ALTER PROCEDURE [dbo].[Update_Users]
    (@Id INT,
     @StaffName NVARCHAR(50) NULL,
     @Email NVARCHAR(100) NULL,
     @UserName VARCHAR(40),
     @Password VARCHAR(50),
     @Phoneno NVARCHAR(50) NULL,
     @Admin CHAR(3) NULL)
AS
BEGIN
    UPDATE Users 
    SET StaffName = ISNULL(StaffName, @StaffName),
        Email = ISNULL(Email, @Email),
        UserName = ISNULL(UserName, @UserName),
        PasswordHash = HASHBYTES('SHA2_512', @Password),
        Phoneno = ISNULL(Phoneno, @Phoneno),
        [IsAdmin] = ISNULL(IsAdmin, @Admin)
    WHERE Id = @Id
END

Как я могу использовать hashbytes и isnull на passwordhashколонка

Ответы [ 2 ]

0 голосов
/ 06 апреля 2019

конвертировать в varbinary

 isnull( HASHBYTES('SHA2_512', @Password),convert (varbinary,'') )

Попробуйте это

 alter procedure [dbo].[Update_Users]
(
@Id int ,
@StaffName nvarchar(50)   ,
@Email nvarchar(100)  ,
@UserName varchar(40),
@Password varchar(50),
@Phoneno nvarchar(50)  ,
@Admin char(3)   
)
as
 begin
 Update Users 
 Set StaffName=ISnull(StaffName,@StaffName),
  Email=ISnull(Email,@Email),
  UserName=Isnull(UserName,@UserName),
  PasswordHash =  isnull( HASHBYTES('SHA2_512', @Password),convert (varbinary,'') ),
  Phoneno=Isnull(Phoneno,@Phoneno),
  [IsAdmin]=Isnull(IsAdmin,@Admin)
  where Id=@Id
end
0 голосов
/ 06 апреля 2019

Не уверен, если я угадаю это правильно, но из шаблона вашего UPDATE вы можете захотеть

...
passwordhash = isnull(password, hashbytes('SHA2_512', @Password)),
...

, т. Е. Если passwordhash имеет значение null, замените его хэшем пароля в@password переменная.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...