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'
视为相同。
在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'
视为相同。