Sql 如何在变量中设置哈希?

Sql 如何在变量中设置哈希?,sql,sql-server,Sql,Sql Server,我试图在变量中加密此查询的结果,即点 我得到的不是散列而是一个奇怪的符号串 ALTER PROCEDURE [dbo].[EncriptDesEncriptPassword] ( @pUsuario CHAR(15), @pContraseña AS VARCHAR(10), ) AS BEGIN DECLARE @ContraseñaHash varchar(70), @passwordHash varchar(70); SELECT @Con

我试图在变量中加密此查询的结果,即点 我得到的不是散列而是一个奇怪的符号串

ALTER PROCEDURE [dbo].[EncriptDesEncriptPassword] (
    @pUsuario CHAR(15), 
    @pContraseña AS VARCHAR(10),
)
AS
BEGIN    
    DECLARE @ContraseñaHash varchar(70),
    @passwordHash varchar(70);

   SELECT @ContraseñaHash = HASHBYTES ('SHA2_256', @pContraseña) FROM UsersApp2 WHERE Usuario= @pUsuario
预期结果:
0xFEED6896B729BF4A2EA5396FF3EFCB99CEB2187CA825AC8B9598D3819D1142A5

我得到的:

þíh–·)J.¥9oóï™您应该使用varbinary来获得这样的结果,而不是varchar。即:

ALTER PROCEDURE [dbo].[EncriptDesEncriptPassword] (
    @pUsuario CHAR(15), 
    @pContraseña AS VARCHAR(10),
     
    
       )
       AS
     BEGIN

        DECLARE
  @ContraseñaHash varbinary(1000),
    @passwordHash varchar(70);

   
   
   SELECT @ContraseñaHash = HASHBYTES ('SHA2_256', @pContraseña)
FROM UsersApp2 
WHERE Usuario= @pUsuario
--...

为什么希望从
varchar
返回一个二进制值?
HASHBYTES
,顾名思义和文档解释,会生成一个
binary
类型。不看就把它塞进一个
VARCHAR
,会让你得到一些莫吉贝克。如果要将十六进制字符串作为字符串,请使用。但是,请检查您是否真的需要它,或者您是否真的想要存储哈希值——在后一种情况下,您可能只想将其保存为
VARBINARY