2013-03-18 77 views
3

我试图使用hashbytes命令更新SQL服务器r2上的列。下面是命令的简化版本:SQL hashbytes更新语句不像预期的那样

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

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

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

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

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

它返回一个正确的字符串:

0x9849FDB80C17B64322DA094BE963A963 

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

回答

2

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

使用功能构建fn_varbintohexstr您可以将二进制数据转换成文本,如下所示:

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

完美的作品。谢谢! – adamkylegreen 2013-03-18 16:17:09