我正在尝试使用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命令按预期工作。但它不适用于我们的生产服务器。
答案 0 :(得分:2)
你得到这个的原因是因为HASHBYTES返回二进制数据类型,而这不是文本。
使用内置函数fn_varbintohexstr,您可以将二进制数据转换为文本,如下所示:
UPDATE [tbl] SET [checksum] = master.dbo.fn_varbintohexstr(HASHBYTES('MD5',[field1]))