0

在关系 Person (SSN, State, Name) 中,添加一个基于元组的检查:如果一个人的州是 NY,那么他的 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

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

4

1 回答 1

1

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

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

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

当以下所有都为真时

  1. 州是纽约
  2. SSN 的左三位是 => '050'
  3. SSN 的左三位是 <= 134。

或者

  1. 萨特不是纽约

请记住,您可以在 Parens 中对一组逻辑表达式进行分组

例如

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

应该不会太难

于 2012-05-05T03:45:59.447 回答