将来自另一个表的数据放入检查约束中

时间:2013-04-19 08:47:09

标签: sql triggers constraints

我有桌子说table1有一个colum说checkColumn,

现在我想对字段checkColumn设置一个检查约束,它只允许另一个表中的数据表示某些条件的表2,

我试过这样,

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

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

1 个答案:

答案 0 :(得分:7)

不幸的是,您无法将Sub Query插入Check约束的上下文中。但在这里我想给出建议,你可以使用任何触发器或功能,你可以使用 用于检查数据依赖性的外键约束 我想与函数分享一个例子。 e.g。

CREATE FUNCTION fn_Check_Rollnumber (
    @Rollnumber INT
)
RETURNS VARCHAR(10)
AS
BEGIN
    IF EXISTS (SELECT Rollnumber FROM Table_Student WHERE Rollnumber = @Rollnumber)
        return 'True'
    return 'False'
END

现在您可以在检查上下文中使用此功能,

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