Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
子查询中的SQL检查约束-Sybase_Sql_Database_Sybase - Fatal编程技术网

子查询中的SQL检查约束-Sybase

子查询中的SQL检查约束-Sybase,sql,database,sybase,Sql,Database,Sybase,我正在尝试向Sybase表添加一个约束,以检查引用表中是否存在两个用户提供的值,以确保它们的有效性,它们提交的表单上的某些日期也必须与同一引用表中的某些日期条件相匹配 但是,Sybase似乎不允许在检查约束内进行子查询? 我已经在下面提供了我到目前为止的想法 如果能帮我解决这个问题,那就太好了 ALTER TABLE accomodation_t ADD CHECK (accomodation_t.requested_type_code, accomodation_t.provided_ty

我正在尝试向Sybase表添加一个约束,以检查引用表中是否存在两个用户提供的值,以确保它们的有效性,它们提交的表单上的某些日期也必须与同一引用表中的某些日期条件相匹配

但是,Sybase似乎不允许在检查约束内进行子查询? 我已经在下面提供了我到目前为止的想法

如果能帮我解决这个问题,那就太好了

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))))
在触发器之前使用insert。此外,您应该始终避免使用这样的派生检查约束。在这种情况下,触发器更可取

我以前没有在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

相反,在触发器后使用insert。实际上不可能,因为如果不满足这些字段条件,则不应允许插入