在关系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
我们需要一个触发器吗?我在想如果发生新的插入/更新,请检查该值。但问题不在于此。
答案 0 :(得分:1)
好的,所以它的通用但DDL通常不是,但让我们使用SQL Server CHECK Constraints上的文档作为指南
您可以使用任何逻辑创建CHECK约束(布尔值) 表达式,它根据逻辑运算符返回TRUE或FALSE。 对于前面的示例,逻辑表达式为:
salary >= 15000 AND salary <= 100000.
请注意,文档中的上述示例不是 SELECT语句,而是表达式。这意味着您需要做的就是提出一个返回TRUE的表达式
当以下所有条件都成立时
或者
记住您可以在Parens
中对一组逻辑表达式进行分组e.g。
(Group of logical expressions) OR (Group of logical expressions)
不应该太难