在此关系中添加基于元组的检查

时间:2012-05-05 03:31:04

标签: sql database check-constraints

  

在关系Person(SSN,State,Name)中,添加基于元组的检查:如果a   人的州是纽约州,那么他的SSN的前三位必须是   '050'和'134'之间。 (提示:在SQL中使用LEFT函数)。

CREATE TABLE Person (
    SSN   INT PRIMARY KEY,
    State   CHAR(50),
    Name  CHAR(100),
    CHECK ( 
        SELECT LEFT (SSN, 3) AS FirstThreeDigits, SSN FROM Person,
        WHERE Person.State == ‘NY’) between '050' and between '134'
);

我对这里的CHECK条件不满意。我不确定这是否是进行条件检查的正确方法。有人可以验证一下吗?如果没有,我们如何进行条件检查?

我们需要这个:

if state == 'NY', perform CHECK

我们需要一个触发器吗?我在想如果发生新的插入/更新,请检查该值。但问题不在于此。

1 个答案:

答案 0 :(得分:1)

好的,所以它的通用但DDL通常不是,但让我们使用SQL Server CHECK Constraints上的文档作为指南

  

您可以使用任何逻辑创建CHECK约束(布尔值)   表达式,它根据逻辑运算符返回TRUE或FALSE。   对于前面的示例,逻辑表达式为:
  salary >= 15000 AND salary <= 100000.

请注意,文档中的上述示例不是 SELECT语句,而是表达式。这意味着您需要做的就是提出一个返回TRUE的表达式

当以下所有条件都成立时

  1. 州是纽约
  2. SSN的左三位是=&gt; '050'
  3. SSN的左三位是&lt; = 134.
  4. 或者

    1. Sate不是纽约
    2. 记住您可以在Parens

      中对一组逻辑表达式进行分组

      e.g。

      (Group of logical expressions) OR (Group of logical expressions)
      

      不应该太难