2010-12-15 3 views
0

2 열SQL Server 2008 : 다른 열 값과 관련하여 열 값 제한

CREATE TABLE mytable 
(
    x int 
    y char(1) 
) 

테이블이 있습니다. x 값과 관련하여 y 제약 조건을 적용하고 싶습니다.

예를 들어, x = 5 일 때 x = 12 y = 'b'일 때 y = 'a'를 가지려고합니다. SQL Server 2008에서 가능합니까?

case when x = 5 then y='a' end 

다음 문장은 작동하지 않으므로 아날로그를 묻습니다.

+0

좋아요! 답변 주셔서 감사합니다. – Tim

답변

1
CREATE TABLE mytable 
(
    x int not null, 
    y char(1) not null, 
    constraint CK_mytable_myrules CHECK (
    1 = CASE 
      WHEN x=5 AND y='a' THEN 1 
      WHEN x=12 AND y='b' THEN 1 
     /* More rules here */ 
      ELSE 0 END 
) 

경우 표현는 항상 을 반환해야한다. 부울은 SQL의 일부가 아닙니다.


일반적인 규칙 인 경우 또는, 당신은 두 가지 선택이 "우리가 이러한 규칙 중 하나를 일치하지 않은 경우를 통해하자"- (내 자신, 단지 중첩 된 경우, 또는 "대체"규칙을 발명 용어) :

중첩 된 경우 :

1 = CASE 
      WHEN x=5 THEN 
      CASE WHEN y='a' THEN 1 
        ELSE 0 END 
      WHEN x=12 THEN 
      CASE WHEN y='b' THEN 1 
        ELSE 0 END 
     /* More rules here */ 
      ELSE 1 END 

또는 다른 방법 :

1 = CASE 
      WHEN x=5 AND y='a' THEN 1 
      WHEN x=5 THEN 0 
      WHEN x=12 AND y='b' THEN 1 
      WHEN x=12 THEN 0 
     /* More rules here */ 
      ELSE 1 END 
0

설정할 수 있습니다 그러한 제약. Cf. link text 적합한 UDF를 정의해야합니다.

아, 다른 가능성도 있습니다. 당신의 표현 설정할 수 있습니다