我的想法是为我的表生成一个唯一的 ID,为 SQL Server 中的我的表生成一个唯一的字母数字 ID,因此我使用 Newid 函数来执行此操作,然后将结果截断为 8 个字符。我的问题是用这个代码我确定有一个唯一的ID吗?或者也许不是这里的代码:
DECLARE @r varchar(8)
SELECT @r = coalesce(@r, '') + n
FROM (SELECT top 8 CHAR(number) n
FROM master..spt_values
WHERE type = 'P' AND
(number between ascii(0) and ascii(9)
OR number between ascii('A') and ascii('Z')
OR number between ascii('a') and ascii('z'))
ORDER BY newid()) a
DECLARE @id varchar(10)
SET @id=CONVERT(varchar(8), @r)
DECLARE @myid varchar(10)
SELECT @myid=SUBSTRING(@r,1,2)+'-'+SUBSTRING(@r,3,3)+'-'+SUBSTRING(@r,6,3)
PRINT 'Value of @myid is: '+ @myid
最佳答案
NEWID() 生成 v4 GUID。在该 GUID 方案中,前 8 个字节可以是任何十六进制数字 0-F,并且完全由随机生成的数据组成。这并不能保证是唯一的;事实上,没有任何 v4 GUID 能保证是唯一的,只是随机位(128 中的 112)可以表示 5.19 个十亿数字之一,因此其中任意两个在同一系统中匹配的几率是无穷小。仅使用前 8 个字节,您将只有 2^32 个组合,这可能看起来仍然很多(40 亿分之一),但由于生日问题,在生成了很少的 77,000 个之后,您就有了 50-50 的机会在生成副本时。
关于sql - 生成唯一的字母数字 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12467833/