从字符串生成唯一ID

时间:2014-01-17 17:05:13

标签: sql-server tsql sql-server-2008-r2

我正在尝试使用文本字符串并从中创建一个唯一的数值,我没有运气。

例如,我有用户名(第一个和最后一个)和生日。我试过取这些值并将它们转换为varbinary,它确实从数据中给出了一个数值,但它并不是唯一的。在大约700条记录中,我将获得至少100个重复的数值,但用于生成数字的名字,姓氏和生日的文本是不同的。

以下是我一直在尝试的一些代码:

SELECT CONVERT(VARCHAR(300), CONVERT(BIGINT,(CONVERT(VARBINARY, SE.FirstName) +  CONVERT(VARBINARY, SE.BirthDate) ))) FROM ELIGIBILITY SE

如果我使用该代码并转换以下数据,则结果为3530884780910457344.因此,从此唯一数据生成相同的数字:

David       12/03/1952
Janice      12/23/1952
Michael     03/24/1952
Mark        12/23/1952

我正在寻找某种方式,越简单越好,从这些数据中获取这些值并生成唯一的数值。我之所以需要使用这些值作为输入是因为我试图避免在将来创建重复项,并且能够根据公式预测数值。这就是NewID()不适合我的原因。

1 个答案:

答案 0 :(得分:6)

简单地说:

SELECT CHECKSUM(name, BirthDate) FROM dbo.ELIGIBILITY;

当然,由于仍然存在碰撞的可能性,也许你应该更好地定义你实际上要做的事情。你已经陈述了一些原因,例如NEWID()不起作用,但我仍然没有遵循这个唯一编号的基本目的。