2014-03-07 4 views
0

Sybase 테이블에 제약 조건을 추가하여 유효성을 보장하기 위해 두 개의 사용자 제공 값이 참조 테이블에 있는지 확인하고 제출하는 양식의 일부 날짜가 있는지 확인합니다. 동일한 참조 테이블 내의 일부 날짜 기준과 일치시킵니다.하위 쿼리의 SQL 검사 제약 조건 - Sybase

그러나 Sybase가 CHECK 제약 조건 내에서 하위 쿼리를 허용하지 않는 것으로 보입니까? 나는 내가 지금까지 생각해 왔던 것을 아래에 제공했다.

어떻게하면이 문제를 해결할 수있는 방법에 대한 도움이 될 것입니다.

ALTER TABLE accomodation_t 
    ADD CHECK (accomodation_t.requested_type_code, accomodation_t.provided_type_code IN 
(SELECT(ref.accom_req_typ_cde, ref.accom_prov_typ_cde 
    FROM acc_type_ref_t ref, accomodation_t ac 
    WHERE ac.accm_recd_date >= ref.eff_date 
    AND (ref.term_dte = '01/01/1900' OR ac.accom_recd_dte <= ref.term_dte)))) 
+1

대신이'after' 트리거를 삽입 사용 시작하는 샘플이 될 것입니다. – Rahul

+0

필드 기준을 충족시키지 않으면 삽입이 허용되어서는 안되므로 실제로 가능하지 않습니다. – deanmau5

답변

0

insert before 트리거를 사용하십시오. 게다가 이와 같은 파생 체크 제약을 피하는 것이 좋습니다. 이러한 유형의 시나리오에서는 트리거가 훨씬 바람직합니다.

내가 전에 SYBASE에 근무 한 적이없는하지만 아래

CREATE TRIGGER check_constraint_trigger BEFORE INSERT 
ON accomodation_t FOR EACH STATEMENT 
BEGIN 
accomodation_t.requested_type_code, 
accomodation_t.provided_type_code IN 
(SELECT(ref.accom_req_typ_cde, ref.accom_prov_typ_cde 
    FROM acc_type_ref_t ref, accomodation_t ac 
    WHERE ac.accm_recd_date >= ref.eff_date 
    AND (ref.term_dte = '01/01/1900' OR ac.accom_recd_dte <= ref.term_dte))) 
END 
관련 문제