2010-01-15 168 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 ...