복붙노트

[SQL] 여러 열에서 CHECK 제약 조건

SQL

여러 열에서 CHECK 제약 조건

나는 2008 SQL 서버 사용

나는 데이터 입력의 유효성을 검사하려고 같은 테이블에 여러 컬럼에 CHECK 제약 조건을 사용합니다.

나는 오류가 발생 :

CHECK 제약 조건은 이런 방식으로 작동하지 않습니다.

FK를 사용하지 않고 하나의 테이블에이를 구현하기위한 다른 방법은?

감사

내 코드의 예 여기

CREATE TABLE dbo.Test 
(   
EffectiveStartDate  dateTime2(2)        NOT NULL,
EffectiveEndDate    dateTime2(2)        NOT NULL
    CONSTRAINT CK_CmsSponsoredContents_EffectiveEndDate CHECK (EffectiveEndDate > EffectiveStartDate),
);

해결법

  1. ==============================

    1.예, 테이블 수준의 CHECK 제약 조건을 정의

    예, 테이블 수준의 CHECK 제약 조건을 정의

    CREATE TABLE foo (
       bar int NOT NULL, 
       fred varchar(50) NOT NULL,
    
       CONSTRAINT CK_foo_stuff CHECK (bar = 1 AND fred ='fish')
    )
    

    당신은 열 제약으로 인라인을 선언하는

    ...
    fred varchar(50) NOT NULL CONSTRAINT CK_foo_fred CHECK (...)
    ...
    

    편집, 쉽게 설명보다 게시합니다. 당신의 쉼표를 수정했습니다.

    CREATE TABLE dbo.Test 
    (   
      EffectiveStartDate  dateTime2(2)        NOT NULL,
      EffectiveEndDate    dateTime2(2)        NOT NULL,  --need comma
      CONSTRAINT CK_CmsSponsoredContents_EffectiveEndDate CHECK (EffectiveEndDate > EffectiveStartDate) --no comma
    );
    

    물론, 질문 남아 당신은 ... 그것이 FK 제약 있어야 할 CHECK 제약 조건을 사용하고 있습니까?

  2. ==============================

    2.점검 제한 조건은 단일 열 또는 전체 기록을 참조 할 수 있습니다.

    점검 제한 조건은 단일 열 또는 전체 기록을 참조 할 수 있습니다.

    레코드 레벨 제한이 구문을 사용합니다 :

    ALTER TABLE MyTable
    ADD CONSTRAINT MyCheck
    CHECK (...your check expression...)
    
  3. ==============================

    3.당신은 단순히 테이블에 트리거에서 유효성 검사를 적용 할 수 있습니다, 특히 검사가 실패 할 경우 작업이 롤백됩니다 어느 쪽이든 그.

    당신은 단순히 테이블에 트리거에서 유효성 검사를 적용 할 수 있습니다, 특히 검사가 실패 할 경우 작업이 롤백됩니다 어느 쪽이든 그.

  4. from https://stackoverflow.com/questions/3438066/check-constraint-on-multiple-columns by cc-by-sa and MIT license