我正在尝试使用检查约束创建三个表,但收到此错误消息
<块引用>在此上下文中不允许使用子查询。只允许标量表达式和在预期条件的上下文中指定的非布尔类型的表达式,靠近 ')'。
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] ));
答案 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')