SQL hashbytes更新语句不符合预期

时间:2013-03-18 15:41:18

标签: tsql

我正在尝试使用hashbytes命令更新SQL Server r2上的列。这是命令的简化版本:

COMMAND: "UPDATE [tbl] SET [checksum] = HASHBYTES('MD5',[field1])"

问题是,它会向所有字段写出这样的奇怪字符:

"˜Iý¸¶C"KéS©c"

但是,如果我选择(使用相同的字段):

select HASHBYTES('MD5',[field1]) from [tbl];

返回正确的字符串:

0x9849FDB80C17B64322DA094BE963A963

任何人都知道为什么会这样做。我已经尝试过测试数据库,并且update命令按预期工作。但它不适用于我们的生产服务器。

1 个答案:

答案 0 :(得分:2)

你得到这个的原因是因为HASHBYTES返回二进制数据类型,而这不是文本。

使用内置函数fn_varbintohexstr,您可以将二进制数据转换为文本,如下所示:

UPDATE [tbl] SET [checksum] = master.dbo.fn_varbintohexstr(HASHBYTES('MD5',[field1]))