如何在TSQL代码中使用HASHBYTES()?
我的代码的问题是
UPDATE mytable
SET hash_value=HASHBYTES('MD5',convert(varchar(max),col1),convert(varchar(max),col2),..)返回NULL。你能建议我,我的代码出了什么问题吗?
发布于 2011-07-04 22:15:33
HASHBYTES有两个参数。第一个是散列算法(MD2 | MD4 | MD5 | SHA | SHA1),第二个是要散列的值。如果你有任何其他的值作为算法,你会得到NULL作为结果。
如果第二个参数中的值为NULL,您还将获得NULL作为结果。
也许你可以使用这样的东西。
hashbytes('MD5', coalesce(convert(varchar(max),col1), '') +
coalesce(convert(varchar(max),col2), '') +
...)使用+连接字符串,并使用coalesce处理NULL值。
发布于 2011-07-04 22:17:39
如果不知道代码示例中的col1是什么,这可能无法回答您的问题,但是HASHBYTES的第一个参数应该是algorithm。
在MSDN中,语法是:
HashBytes ('<algorithm>', { @input | 'input' } )<algorithm>::= MD2 | MD4 | MD5 | SHA | SHA1编辑文章还解释了输入参数可以是字符串,也可以是对类型为varchar、nvarchar或varbinary的变量的引用,它是单个输入。您正在传递多个输入参数。然而,令我惊讶的是,当我尝试运行函数The hashbytes function requires 2 argument(s).时,您得到的是null,而不是我得到的错误。得到null结果的最有可能的原因是您的输入值为null,即您要转换为varchar的列为NULL。如果你运行select hashbytes('md5', convert(varchar(max), null)),你会得到一个NULL结果。
https://stackoverflow.com/questions/6572584
复制相似问题