如何在SQL代码中使用HASHBYTES()?
我的代码问题是
UPDATE mytable
SET hash_value=HASHBYTES('MD5',convert(varchar(max),col1),convert(varchar(max),col2),..)
返回NULL
。
你能告诉我,我的代码有什么问题吗?
答案 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
结果。