在SQL Server和.NET中生成唯一代码和Randon代码

时间:2018-07-12 17:20:33

标签: c# sql-server

我需要在C#/ ASP.NET中生成一个半随机代码,该代码在SQL Server数据库中必须是唯一的。

这些代码每次运行最多需要批量生成100个代码。

鉴于需求,我不确定如何在不生成代码的情况下执行此操作,然后检查数据库是否存在,这似乎是一种可怕的方法。

以下是要求:

  • 最长10个字符(仅字母数字)
  • 必须区分大小写
  • 用户可以为代码指定一个可选的3个字符的前缀
  • 在数据库中不得违反2列唯一约束,即在“类别”(CONSTRAINT ucCodes UNIQUE (ColumnCodeText, ColumnCategoryId))中必须是唯一的“代码文本”

因此,给定10个字符的限制,GUID不是一个选择。我认为,考虑到不区分大小写的要求,数据库冲突的数学概率相当高。

同时,我相信,有足够多的可能组合,使得数据库中的直接查询表将成为禁止。

是否存在一种合理有效的方式来生成具有这些要求的代码,而又不涉及一次将它们保存到数据库一个代码并等待唯一的密钥冲突以查看其是否通过?

1 个答案:

答案 0 :(得分:0)

您在这里有两个选择。

  1. 您生成一个新ID并将其插入。如果抛出dup唯一键异常,则重试直到成功或保全(如果ID用尽)。如果大多数ID用完了,性能会发臭。
  2. 您预先生成了所有可能的ID,并将其存储在表中。每当需要获取一个时,都可以从随机行索引中删除一个,并将其用作ID。数据库将为您处理并发性,因此其保证是唯一的。如果给出了前三个字母,则可以简单地添加where子句以限制行以匹配该约束。