SQL Server生成唯一值

时间:2010-01-15 16:06:23

标签: sql-server insert

SQL Server 10,.NET,C#

这与this question类似,但不完全相同。

当用户在我的事件安排网站上创建新事件时,将生成唯一排序易于记忆的代码,因此可以传达此代码(通过电话,让我们说)参加者。生成的代码类似于:

JohMonBlue5
<abbriviated name><abbriviated week day><some uniquefying suffix><index>

是的,我可以通过电子邮件发送链接,但我认为这不是一个选择。

注意:我选择使用uniquefying后缀作为颜色,因为我认为记忆颜色比数字更容易。我仍然在碰撞时使用数字。

问题:实现这一点的好方法是什么(我已对列进行了唯一约束):

  1. 我可以在应用端生成索引,并使用try { insert } catch { retry }。在这种情况下,如何从任何其他异常中判断“重复列值”异常?通过消息文本?
  2. 使用MSSQL Server中的内容增加尾随数字,直到达到唯一性。

1 个答案:

答案 0 :(得分:2)

我建议不要使用catch来专门处理你的重复项。 Catch只应该用于真正的错误,除此之外,异常捕获是缓慢且昂贵的。最好生成一个值并测试它是否已经通过查询存在而不是允许抛出异常。

我也会在一个地方实现发电机。不要通过在客户端上创建颜色和db中的数字来拆分它。选择一侧或另一侧。在Sql Server端,实现此类功能的一种好方法是使用UDF。也许您可以创建关键字表(在您的情况下为颜色)并从中随机选择,然后执行增量的唯一性。

我也认为你没有专属的颜色。选择任何简单易记的单词。龙,星期五,蓝色,众议院......