在 SQL Server 中,我们可以使用“校验和”轻松地在整行上生成哈希:
select
checksum(*), *
from mytable
有没有办法使用 hashbytes 函数来做同样的事情? 像这样的东西:
select
hashbytes('md5', *), *
from mytable
最佳答案
恐怕不容易。在大多数情况下,您不应该真正想要这样做。但如果必须的话,为每一行生成一个 XML 文档并对 XML 文档进行哈希处理可能是最简单的方法:
SELECT HASHBYTES('MD5', X.value)
FROM Data
CROSS APPLY (
SELECT value =
CAST((SELECT Data.* FROM (SELECT 1) AS X (y) FOR XML AUTO) AS VARCHAR(MAX))
) AS X
编辑:我做了一些测试,应用 CAST(... AS VARCHAR(MAX))
正如我在上面更新的语句中所做的那样,改进了性能约15%。更重要的是,它可以防止宽表上的截断错误。即使经过此修复,您自己连接列的速度仍然快了 15% 左右。使用 CONCAT()(MSSQL 2012 中提供)函数可以让您的生活变得更轻松,因为您可以省略对每列应用 ISNULL 和 CAST 函数。
关于sql-server - 如何使用哈希字节(如校验和)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28581888/