【发布时间】:2016-06-03 23:53:49
【问题描述】:
我有一些包含以下几行的代码:
CAST(HASHBYTES('MD5', 'some long string with up to 256 characters') AS int)
CAST(HASHBYTES('SHA2_256', 'some very very long string...') AS int)
这样做是为了生成一个唯一的 int 值,然后将该 int 值用作查找键(或连接中的外键)。所以我对为什么这样做的最好猜测是使连接更快并且能够生成索引(并且不会遇到 900 字节的限制)。
但我不确定上述输出在转换为 int 时是否会产生更多的冲突。
我的理解是不可能将 MD5 哈希甚至 SHA-256 哈希表示为 int 值...
代码最初是在 SQL-Server 2008 上开发的。我目前使用的是 SQL-Server 2014。
【问题讨论】:
-
所以你只需要一个唯一的 INT 值?你不能使用递增的身份吗?
-
我需要基于字符串的 int 的唯一性。所以相同的字符串应该给出相同的 int 值。
-
“相同的字符串 -> 相同的 int”?那个怎么样?考虑到
int仍然是 4 个字节长。 -
到目前为止它确实有效,因为字符串很短,我想这可能是基于内部转换为 int 的纯粹巧合。
标签: tsql sql-server-2012 sql-server-2014