2010-06-27 33 views
2

如何創建或什麼是 功能的其中 使用使用給定的名稱作爲字符串變量 生成非註冊用戶 名邏輯SQL 2005 (如Hotmail中註冊,雅虎)函數生成非registerd用戶名

回答

0

您是否正在嘗試爲「用戶」記錄生成唯一的用戶名,因爲它們的真名?或電子郵件地址?這是否可以在SQL Server中進行跟蹤/存儲(您的問題不是很清楚)?通常情況下,不會爲他們創建用戶名(這是您可以用來吸引用戶註冊的優勢之一,他們可以獲得他們自己的用戶名)。

相反,您可以將電子郵件地址本身用作主鍵,無論如何它總是唯一的:用戶名字段可以爲空(允許NULL),並且只有在用戶註冊並選擇了名稱時才包含數據。

如果您想要顯示用戶名或其電子郵件地址(如果他們沒有用戶名),可以使用COALESCE或ISNULL,例如SELECT ISNULL(username, email_address) - 它給出'用戶名'的值,除非它爲空,在這種情況下,它會給出'email_address'的值。

希望有幫助 - 也許不是你問的問題,但如果你可以改變或詳細說明,那麼我們將很樂意進一步幫助。


另外,我再次讀你的問題:你是否試圖建議用戶可用的用戶名?舉例來說,如果他們進入:

名字:Kieren 姓:Johnstone

然後你要提出建議KierenJohnstone,KierenJohnstone1,JohnstoneK,KJohnstone等? (如果它們可用,那就是)。

如果是這樣的話,你應該寫它產生的可能性的方法,像這樣:

public IEnumerable<string> GeneratePossibleBaseUsernames(string firstname, string lastname) 
{ 
    yield return firstname + lastname; // eg KierenJohnstone 
    yield return lastname + firstname; // eg JohnstoneKieren 
    yield return firstname.Substring(0,1) + lastname; // eg KJohnstone 
    yield return lastname + firstname.Substring(0,1); // eg JohnstoneK 
    yield return firstname + lastname.Substring(0,1); // eg KierenJ 
} 

然後,你會看到,如果這些數據庫是可用的:

public List<string> GetAvailablePossibleUsernames(string firstname, string lastname) 
{ 
    List<string> availablePossibilities = new List<string>(); 

    foreach (string possible in GeneratePossibleBaseUsernames(firstname, lastname)) 
    { 
     if (IsAvailable(possible)) 
     { 
      availablePossibilities.Add(possible); 
      continue; 
     } 
     for (int i = 1; i < 100; i++) 
     { 
      string postfixedTest = possible + i.ToString(); 
      if (IsAvailable(postfixedTest)) 
      { 
       availablePossibilities.Add(postfixedTest); 
       break; 
      } 
     } 
    } 
    return availablePossibilities; 
} 

你需要編寫IsAvailable()方法,將字符串作爲參數並返回bool - 如果用戶名不存在於數據庫中,則爲「true」。

此方法將返回一個字符串對象列表,並帶有建議:它將嘗試GeneratePossibleBaseUsernames的結果,如果其中一個不可用,那麼它將在數字1到99之後嘗試它,例如,如果基倫約翰斯通被採納,那就意味着基倫約翰斯通1。

您也可以在SQL存儲過程中實現所有這些。當你插入/更新記錄時,你一定要仔細檢查名字是否可用,或者在用戶名錶上放置一個唯一的索引來停止重複 - 以防兩個人同時使用相同的名字!

希望有所幫助。