2010-06-27 5 views

답변

0

실제 이름이 주어지면 '사용자'레코드의 고유 사용자 이름을 생성하려고합니까? 아니면 이메일 주소? 이 때문에 SQL Server에서 추적/저장할 수 있습니다 (질문은 명확하지 않습니다)? 평소의 일은 사용자를 위해 사용자 이름을 만들지 않는 것입니다 (사용자를 유인하는 데 사용할 수있는 장점 중 하나입니다. 사용자가 자신의 사용자 이름을 얻을 수 있습니다).

대신 이메일 주소 자체를 기본 키로 사용할 수 있습니다. 어쨌든 사용자 이름 필드는 null 허용 (NULL 허용)이며 사용자가 가입하고 이름을 선택한 경우에만 데이터를 포함합니다.

사용자 이름이없는 경우 사용자 이름 또는 이메일 주소를 표시하려는 경우 COLESCE 또는 ISNULL을 사용할 수 있습니다 (예 : SELECT ISNULL(username, email_address)). 'username'값을 제공합니다 (null이 아닌 경우) 이 경우 'email_address'값을 제공합니다.

호프가 도움이 될 것입니다. 아마도 당신이 묻고있는 질문이 아니 겠지만, 다시 말해서 정교 할 수 있다면 우리는 더 도와 드리겠습니다.


또는 질문을 다시 읽습니다. 사용 가능한 사용자 이름을 제안 하시겠습니까? 예를 들어 그들이 입력 한 경우 :

이름 : Kieren 성 :

그런 다음 KierenJohnstone, KierenJohnstone1, JohnstoneK, KJohnstone 등을 제안 할 Johnstone? (사용할 수있는 경우).

이런 경우,이 같은 가능성을 생성하는 방법, 작성해야 : 그 데이터베이스에서 사용할 수있는 경우 당신이 보는 것, 그리고

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() 메서드를 작성하여 문자열을 매개 변수로 사용하고 사용자 이름이 데이터베이스에없는 경우 'true'를 반환해야합니다.

이 메서드는 GeneratePossibleBaseUsernames에서 결과를 시도하고 그 중 하나가 사용 가능하지 않으면 그 이후에 1에서 99까지의 숫자로 시도합니다. KierenJohnstone이 잡히면 KierenJohnstone1을 제안합니다.

또한이 모든 것을 SQL 저장 프로 시저 내에서 구현할 수 있습니다. 레코드를 삽입/업데이트 할 때 이름을 사용할 수 있는지 다시 확인하거나 중복을 막기 위해 사용자 이름 테이블에 고유 한 인덱스를 넣어야합니다. 두 사람이 같은 시간에 동일한 이름을 사용하는 경우를 대비하여!

희망이 있습니다.

관련 문제