以指定格式生成唯一ID

时间:2016-04-29 16:13:53

标签: sql-server uniqueidentifier

我正在开发一个必须按以下格式生成唯一引用号的系统:

[A-Z]{2}[current][8 randomized alpha/numerical characters]

许多用户可能同时使用该系统。

所以我的问题是如何确保这个参考号始终是唯一的。经过一年后,可以重复使用8个随机字符。该号码将存储在数据库中。

2 个答案:

答案 0 :(得分:1)

如果您的最终值确实必须包含随机元素,那么确保唯一性的唯一方法是生成它,然后检查现有数据以查看生成的值是否已存在。

您可以使用AFTER INSERT / UPDATE TRIGGER执行此操作。

答案 1 :(得分:1)

  declare @abc varchar(36) = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'

  select char(cast(rand()*1000  as int)% 25+65) 
  + char(cast(rand()*1000  as int)% 25+65) + '[current]'
  + SUBSTRING(@abc,cast(rand()*1000  as int)% 36+1,1)
  + SUBSTRING(@abc,cast(rand()*1000  as int)% 36+1,1)
  + SUBSTRING(@abc,cast(rand()*1000  as int)% 36+1,1)
  + SUBSTRING(@abc,cast(rand()*1000  as int)% 36+1,1)
  + SUBSTRING(@abc,cast(rand()*1000  as int)% 36+1,1)
  + SUBSTRING(@abc,cast(rand()*1000  as int)% 36+1,1)
  + SUBSTRING(@abc,cast(rand()*1000  as int)% 36+1,1)
  + SUBSTRING(@abc,cast(rand()*1000  as int)% 36+1,1) code

我故意混合样式以显示变体。