6

我有一个表说table1和一个colum说checkColumn,

现在我想对字段 checkColumn 设置一个检查约束,这将只允许另一个表中存在的数据,例如表 2 在某些条件下,

我试过这样,

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

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

4

1 回答 1

7

不幸的是,您不能将 Sub Query 插入到 Check 约束的上下文中。但在这里我想给点建议,你可以使用任何触发器或函数,你可以使用外键约束来检查数据依赖关系我想分享一个函数的例子。例如

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')
于 2013-04-19T09:07:04.240 回答