2010-08-04 3 views
0

데이터베이스에 결혼 상태 필드가 있는데, 각각 다른 테이블에 결혼 상태를 나타내는 숫자가 있습니다.번호를 혼인 상태로 매핑하는 방법

 
1 = single 
3 = married 
4 = divorced 

두 번째가 가지고있는 값은 다음과 같습니다 : 첫 번째 표는 숫자 1, 3, 4가 내가 필요

 
single 
married 
divorced 

if 문 다음과 같이 테이블 필드 1은 내가 원하는 값을 반환하는 경우 3 '결혼'과 4 '이혼'(Response.Write 사용) 경우 '싱글'메시지를 작성하십시오.

+0

에 (확실하지가 질문을 정리하기 위해 시도 실수로 변경되지 않은 경우를 입력 할 수 있습니다 그것의 의미.) – dtb

답변

6

"if"문을 C#으로 작성하는 대신 데이터베이스에서 조인을 수행하여 데이터베이스 쿼리의 일부로 텍스트를 검색하는 것이 어떻습니까?

+0

당신은 텍스트 값을 검색하는 저장 프로 시저를 의미합니까, 만약 내가 다른 데이터베이스에 의해 관리되고 쓰기 만 수행하도록 허용되지 않았기 때문에 그 데이터베이스에 하나를 만들 수 없습니다 r 그것으로부터 ead 데이터 – Meg

+0

그래서 거기에 저장 프로 시저를 만들 수 없습니다 – Meg

+2

@Meg : 아니, 당신은 이미 값을 가져 오기 위해 쿼리를 수행해야합니다 - 그래서 설명 테이블에 대한 조인을 수행하도록 SQL을 변경합니다. –

1
string GetStatus(int StatusCode) 
{ 
    return StatusCode == 1 ? "single" : StatusCode == 3 ? "married" : "divorced"; 
} 

현재 일반적으로 정상화 할만한 이유가 없습니다. 실제 상태를 테이블에 저장하고 디스크 공간을 무시할 수있는 경우 성능이 향상됩니다.

편집 : 존의 아이디어 @는

+0

그래서 1 천만 개의 레코드 ... 1, 3, 4 = 10MB 데이터 저장 (tinyint의 경우 엔트리 당 1 바이트). 이름 저장 = 140MB (평균 7 자, char 당 2 바이트). 거대한 것은 아니지만 정확히 무시할 수는 없습니다. – cjk

+1

모든 조인의 성능 또는 문자열을 숫자로 해석하는 함수 호출과 비교할 때 나는이 날과 나이의 130MB가 무시할 만하다고 생각할 수 있다고 생각합니다. – Sruly

6

당신은 다른 경우, 쓰기, case 문,하지만 쉽게 바로 그러한 작은 목록

string[] maritalStatus = new string[] { "", "Single", "", "Married", "Divorced"}; 

Response.Write (maritalStatus[dbValue]); 
+0

저는 창의적이고 유연한이 작품을 좋아합니다. +1 – Sruly

+1

사전 은 "maritalStatus.Add (1,"single ") 등으로 추가 된 요소가 포함 된 문자열 배열보다 적합 할 수도 있습니다. –

+0

투표 해 주셔서 감사합니다. 사전 동의는 잘되지만 간단한 목록으로 위의 코드는 짧고 간결하며 id가 실제로 점프하지 않으면 더 잘 보일 것입니다 –

2

또 다른를위한 배열을 사용할 수있는이 기능보다 아마도 더 옵션은 다음과 같이 값에 매핑되는 열거 형을 선언하는 것입니다.

enum RelationshipStatus 
{ 
    Single = 1, 
    Married = 3, 
    Divorced = 4 
} 

그런 다음 ToString 메서드 귀하의 enum 값을 포함하는 변수. SQL 테이블의 정수 값을 열거 형으로 형변환해야합니다.

이 접근법의 장점은 조건부 if 문을 완전히 제거 할 수 있다는 것이며 결과가 훨씬 더 읽기 쉽다고 생각합니다. 단점은 필요한 경우 다른 언어 (번역)로 현지화하는 것이 쉽지 않다는 것입니다.

0

아마도 열거 형이 가장 우아한 방법일까요?

public enum MaritalStatus 
{ 
    Single = 1, 
    Married = 3, 
    Divorced = 4 
} 

그런 다음 당신은 단순히 문자열, INT 및 MaritalStatus 객체 사이의 변환 Enum.GetName()와 Enum.Parse()를 사용할 수 있습니다. 또한 다른 비즈니스 논리에서 좀 더 우아한 솔루션을 제공 할 수도 있습니다.

0

는, 좋고 나쁜 방법

  1. 을 할 수있는 여러 가지 방법이 될 것입니다 당신은 쿼리에서 테이블을 조인 할 수있는 경우 -
  2. 당신이 발동
  3. 에서 SQL-CASE를 사용할 수있는 하나 개의 좋은 방법이
  4. 중간 계층/C# 코드에서 전환 할 수 있습니다.
  5. 당신은 열거를 만들고 캐스트

같은 `

public enum MaritalStatus 
    { 
     Single = 1, 
     Married = 3, 
     Divorced = 4 
    } 

MaritalStatus status = (MaritalStatus) 4; 
Console.WriteLine(status); 

` 등