创建检查约束 SQL Server

时间:2021-04-06 22:10:55

标签: sql-server tsql

我正在尝试使用检查约束创建三个表,但收到此错误消息

<块引用>

在此上下文中不允许使用子查询。只允许标量表达式和在预期条件的上下文中指定的非布尔类型的表达式,靠近 ')'。

CREATE TABLE P(X INT); 
CREATE TABLE Q( a INT PRIMARY KEY, b INT, CONSTRAINT check_T CHECK ( b IN (SELECT c FROM Q)));
CREATE TABLE O (a INT, b INT, c INT, CONSTRAINT check_O CHECK( [fill-in] ));

1 个答案:

答案 0 :(得分:2)

解决方案 1:使用外键:

CREATE TABLE P(X INT); 
CREATE TABLE Q 
( a INT NOT NULL,
 b INT,
CONSTRAINT PK_a PRIMARY KEY (a)
CONSTRAINT check_T FOREIGN KEY (B)
    REFERENCES REFERENCES Q(c))

解决方案 2:使用 UDF (not recommended):

CREATE FUNCTION udfCheck_T(
    @column --add the data type
)
RETURNS VARCHAR(20)
AS
BEGIN
    IF EXISTS (SELECT * FROM Q WHERE b = @column )
        return 'Success'
    return 'Failure'
END

然后:

ALTER TABLE Q
    WITH CHECK ADD CONSTRAINT check_T
    CHECK (udfCheck_T(b) = 'True')
相关问题