2010-01-15 175 views
2

SQL Server 10,.NET,C#SQL Server生成唯一值

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

当用户在我的事件日程安排网站上创建新事件时,将生成一个简单易记的代码,因此可以将代码传递给(通过电话,比方说)到参与者。这个生成的代码看起来像:

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

是的,我可以电子邮件的链接,但我想这是不是一种选择。

注:我选择使用uniquefying后缀是一种颜色,因为我认为它比颜色更容易记住颜色。如果发生碰撞,我仍然使用数字。

问题:什么是实现这个(我有唯一性约束的列的话)的好方法:

  1. 我可以生成的应用程序方面的指标,并使用try { insert } catch { retry }。在这种情况下,如何从其他异常中指出“重复列值”异常?通过消息文本?
  2. 使用MSSQL服务器中的某些内容来增加尾数,直到达到唯一性。

回答

2

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

我也会在一个地方实现发生器。不要通过在客户端创建颜色和数据库中的数字来分割它。选择一边或另一边。在Sql Server端,实现这种类型的功能的一个好方法是使用UDF。也许你可以创建一个关键字表(在你的案例中的颜色),并从中随机选择,然后执行你的增量唯一性。

我也认为你不必专颜色。选择任何简单易记的单词。 Dragon,Friday,Blue,House ...