HASHBYTES()函数

时间:2011-07-04 14:08:10

标签: sql sql-server tsql

如何在SQL代码中使用HASHBYTES()?

我的代码问题是

UPDATE mytable 
   SET hash_value=HASHBYTES('MD5',convert(varchar(max),col1),convert(varchar(max),col2),..)

返回NULL。 你能告诉我,我的代码有什么问题吗?

2 个答案:

答案 0 :(得分:4)

HASHBYTES有两个参数。第一个是散列算法(MD2 | MD4 | MD5 | SHA | SHA1),第二个是散列值。如果您有任何其他值作为算法,那么您将获得NULL

如果第二个参数中的值为NULL,您也会得到NULL

也许你可以使用这样的东西。

hashbytes('MD5', coalesce(convert(varchar(max),col1), '') + 
                 coalesce(convert(varchar(max),col2), '') +
                 ...)

将字符串与+连接,并使用coalesce处理NULL值。

答案 1 :(得分:0)

如果不知道代码示例中的col1是什么,这可能无法解答您的问题,但HASHBYTES的第一个参数应该是algorithm

MSDN起,语法为:

 HashBytes ('<algorithm>', { @input | 'input' } )<algorithm>::= MD2 | MD4 | MD5 | SHA | SHA1

编辑 MSDN文章还解释了输入参数是字符串或对varchar,nvarchar或varbinary类型的变量的引用,它是单个输入。您传递了多个输入参数。然而,我感到惊讶的是,当我尝试运行The hashbytes function requires 2 argument(s).函数时,你得到的是null,而不是我得到的错误。获得NULL结果的最可能原因是,如果您的输入值为null,即您要转换为varchar的列为null。如果您运行select hashbytes('md5', convert(varchar(max), null)),您将获得NULL结果。