Sql 将另一个表中的数据放入check约束

Sql 将另一个表中的数据放入check约束,sql,triggers,constraints,Sql,Triggers,Constraints,我有一张表,上面有一列,上面有一列 现在我想对字段checkColumn设置一个check约束,在某些条件下,它只允许另一个表(比如表2)中的数据 我就这样试过, ALTER TABLE table1 ADD CHECK (checkColumn=(select field1 from table2 where field2='ABC') ) //the select is not scalar 但当我意识到它不允许在检查条件中使用子查询字符串时,我搜索了一下,读到我应该使用外键、触发器或其他

我有一张表,上面有一列,上面有一列

现在我想对字段checkColumn设置一个check约束,在某些条件下,它只允许另一个表(比如表2)中的数据

我就这样试过,

ALTER TABLE table1
ADD CHECK (checkColumn=(select field1 from table2 where field2='ABC') ) //the select is not scalar

但当我意识到它不允许在检查条件中使用子查询字符串时,我搜索了一下,读到我应该使用外键、触发器或其他东西,但我并不真正理解如何在这里实现这些示例,所以将其作为一个单独的问题发布。

不幸的是,您不能将子查询插入检查约束的上下文中。但在这里我想给你一个建议,你可以使用任何触发器或函数,你可以使用 检查数据相关性的外键约束 我想和大家分享一个函数的例子。 e、 g

现在您可以在检查上下文时使用此函数

ALTER TABLE Table_Fees 
    WITH CHECK ADD CONSTRAINT CK_RollCheck
    CHECK (fn_Check_Rollnumber(Rollnumber) = 'True')

我想到了这种方法,但不太明白它将如何解决我的问题,我的意思是当你在函数调用fn\u Check\u Rollnumber中传递'Rollnumber'时,什么是Rollnumber?表\费用中的一列?是,Rollnumber是表\费用中的一列。那么,它将一个接一个地传递表\费用中的所有卷号。当您定义此约束时,然后每当您插入记录时,使用此函数检查时间约束检查卷号,以便在插入过程中自动逐个检查卷号。
ALTER TABLE Table_Fees 
    WITH CHECK ADD CONSTRAINT CK_RollCheck
    CHECK (fn_Check_Rollnumber(Rollnumber) = 'True')