varchar () 열을 특정 값으로 제한 하시겠습니까?


94

예를 들어 MS SQL Server 2008의 varchar 열에 대해 4 개의 고유 값을 지정하는 방법이 있습니까?

예를 들어 가능한 값으로 '매일', '주간', '월간', '연간'만 허용하는 빈도 (varchar)라는 열이 필요합니다.

테이블을 만들 때 SQL Server Management Studio 내에서 설정할 수 있습니까?


5
더 이상 유효한 값이없고 테이블에 많은 행이있을 것이라고 가정하는 것이 안전하다면 varchar ()보다 작고 빠른 것으로 가능한 값을 인코딩합니다.
Wikser

답변:


127

check constraint값을 제한하는 해당 열에 대한 추가를 이미 살펴 보셨습니까 ? 다음과 같은 것 :

CREATE TABLE SomeTable
(
   Id int NOT NULL,
   Frequency varchar(200),
   CONSTRAINT chk_Frequency CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))
)

2
감사합니다-이것은 훌륭하게 작동했습니다. 내가해야 할 작은 변화 중 하나는 "Frequency IN ...."도 괄호로 묶어야한다는 것입니다. SQL 서버 스튜디오는 어떤 이유로 든 그것을 좋아하지 않았습니다.
아담

1
이 제약 검사는 대소 문자를 구분합니까?
RWendi

3
네 번째 줄 이후 혼수 상태를 놓친 것 Frequency varchar(200)
같습니다

RWendi-기본 SQL Server 데이터 정렬은 대소 문자를 구분하지 않으며 데이터베이스 수준에 적용됩니다. 자세한 정보는 여기 stackoverflow.com/questions/1439485/…
jwoe

57

검사 제약을 원합니다 .

CHECK 제약 조건은 다른 열의 데이터를 기반으로하지 않는 논리식에서 유효한 값을 결정합니다. 예를 들어 급여 열의 값 범위는 $ 15,000에서 $ 100,000 사이의 데이터 만 허용하는 CHECK 제약 조건을 만들어 제한 할 수 있습니다. 이것은 급여가 정규 급여 범위를 넘어서 입력되는 것을 방지합니다.

다음과 같은 것을 원합니다.

ALTER TABLE dbo.Table ADD CONSTRAINT CK_Table_Frequency
    CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))

위의 링크에 설명 된대로 스칼라 함수를 사용하여 검사 제약 조건을 구현할 수도 있습니다.


1
이 대답도 좋았어요 .. 왜 우리는 하나 이상을 받아 들일 수 없습니다 !! :)
아담

1
그래이 하나 :) 더 나은 것을위한 일입니다
Owais 쿠 레시

11

개인적으로 나는 그것을 tinyint로 코딩하고 :

  • 둘 중 하나 : 클라이언트에서 텍스트로 변경하고 1과 4 사이의 제약 조건을 확인하십시오.
  • 또는 : 외래 키가있는 조회 테이블 사용

원인:

  • 텍스트를 저장하는 데 평균 8 바이트, tinyint의 경우 1 바이트가 걸립니다. 수백만 행 이상이 차이를 만들 것입니다.

  • 데이터 정렬은 어떻습니까? "Daily"는 "DAILY"와 동일합니까? 이러한 종류의 비교를 수행하려면 리소스가 필요합니다.

  • 마지막으로 "격주"또는 "매시간"을 추가하려면 어떻게해야합니까? 조회 테이블에 새 행을 추가 할 수있을 때 스키마 변경이 필요합니다.


5

테이블을 편집 할 때
마우스 오른쪽 버튼을 클릭-> 제약 조건 확인-> 추가-> Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly')표현식 필드에 입력하고 (이름) 필드에 좋은 제약 이름을 입력합니다.
완료되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.