SQL 服务器 - 生成唯一 ID 以比较多个列

SQL Server - Generate unique ID to compare several columns altogether

在SQL服务器中,是否可以使用特定数据作为输入值生成GUID。例如,

DECLARE @seed1 VARCHAR(10) = 'Test'
DECLARE @seed1 VARCHAR(10) = 'Testing'
SELECT NEWID(@seed1) -- will always return the same output value
SELECT NEWID(@seed2) -- will always return the same output value, and will be different to the example above

我知道这完全违背了 GUID 的观点,因为 ID 不是唯一的。我正在寻找一种方法来根据特定条件(@seed 值)检测重复记录。

我尝试使用 HASHBYTES 函数生成 VARBINARY 字符串,但是使用 VARBINARY 在 table 之间加入似乎非常慢。我希望找到一个更有效的类似替代方案。

编辑:有关我希望实现此目标的原因的更多信息。

我正在寻找一种快速有效的方法来检测存在于两个 table 上的重复信息。例如,我有名字、姓氏和电子邮件。当这些连接在一起时,should 可以用来检查这些记录是否存在于 table A 和 table B 中。

可以简单地加入这些字段并提供正确的结果,但是速度很慢。因此,我希望找到一种方法,将数据 转换 为诸如 GUID 之类的东西,这将使连接更加高效。

我想你可以使用 CHECKSUM 函数来返回 int 类型。

你应该使用 hashbytes 而不是 checksum 这样的:

SELECT hashbytes('MD5', 'JOHN' + ',' + 'SMITH' + ',' + 'JSMITH@EXAMPLE.COM')

尽管校验和产生具有 2 个完全不同值的相同数字的可能性很小,但我已经在大约一百万的数据集上发生过这种情况。正如 iamdave 所指出的(谢谢!),最好加入某种定界符(在我的示例中为逗号),这样您就不会将 'JOH' + 'NSMITH''JOHN' + 'SMITH' 视为相同。

http://www.sqlservercentral.com/blogs/microsoft-business-intelligence-and-data-warehousing/2012/02/01/checksum-vs-hashbytes/