2014-03-07 40 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