2010-01-15 4 views
2

SQL Server 10, .NET, C#SQL Server генерирует уникальное значение

Это похоже на this question, но не совсем то же самое.

Когда пользователь создает новое событие на моем веб-сайте событийно-планирования, уникальный рода-легко запомнить код должен быть создан, так что этот код может быть передан (по телефону, скажем) к участников. Этот сгенерированный код выглядит примерно так:

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

Да, я мог бы просто по электронной почте ссылку, но я полагаю, что это не вариант.

Примечание: Я выбрал уникальный уникальный суффикс, который является цветом, поскольку я думаю, что легче запомнить цвет, чем число. Тем не менее я использую номер в случае столкновения.

Вопрос: Что такое хороший способ осуществить это (у меня есть ограничение уникальности на колонке уже):

  1. я могу генерировать индекс на стороне приложения, и использовать try { insert } catch { retry }. В этом случае, как я могу указать исключение «Duplicate column value» из любого другого исключения? по тексту сообщения?
  2. Используйте что-то на сервере MSSQL, чтобы увеличить конечный номер до достижения уникальности.

ответ

2

Предлагаю не использовать улов для обработки ваших дубликатов. Поймать следует использовать только для истинных ошибок, и, кроме того, исключение прилова является медленным и дорогостоящим. Было бы лучше создать значение и тест, чтобы узнать, существует ли он уже через запрос, а не исключать возможность исключения.

Я бы также использовал генератор в одном месте. Не разделяйте его, создавая цвет на клиенте и номер в db. Выберите одну или другую сторону. На стороне сервера Sql хорошим способом реализации этого типа функции является использование UDF. Возможно, вы можете создать таблицу ключевых слов (цвета в вашем случае) и произвольно выбрать ее, а затем выполнить свой приращение для уникальности.

Я также считаю, что вы не должны использовать только цвета. Выберите любые слова, которые просты и легко запоминаются. Дракон, пятница, синий, дом ...

Смежные вопросы