相关疑难解决方法(0)

检查约束 - 在此上下文中不允许子查询

我厌倦了添加一个Check Constraint,到目前为止我只是失败了.解决这个问题的方法是什么:

Msg 1046,Level 15,State 1,Line 6

在此上下文中不允许子查询.只允许标量表达式.

这是代码:

ALTER TABLE dbo.PropertySeasonDiscount ADD CONSTRAINT
[CC_PropertySeasonDiscount_MadeFrom_MadeTo]
CHECK (
    (SELECT COUNT(PropertySeasonDiscountId) FROM dbo.PropertySeasonDiscounts apsdeb 
        WHERE 
            (apsdeb.PropertySeasonId = PropertySeasonId) AND
            (
                (apsdeb.ValidForReservationsMadeTo >= ValidForReservationsMadeFrom AND ValidForReservationsMadeFrom >= apsdeb.ValidForReservationsMadeFrom) OR
                (apsdeb.ValidForReservationsMadeFrom <= ValidForReservationsMadeTo AND ValidForReservationsMadeTo <= apsdeb.ValidForReservationsMadeTo)
            )
    ) = 0
);
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server constraints sql-server-2008

7
推荐指数
1
解决办法
7520
查看次数

如果满足条件,防止插入

我有这样一张桌子Content:

id | text | date | idUser ? User | contentType 
Run Code Online (Sandbox Code Playgroud)

另一张桌子Answer:

idAnswer ? Content | idQuestion ? Content | isAccepted
Run Code Online (Sandbox Code Playgroud)

我想确保Answer日期大于Question日期.一个问题是一个Content带有contentType="问题".

我尝试使用以下触发器解决此问题,但是当我尝试插入时Answer出现错误:

ERROR:  record "new" has no field "idanswer"
CONTEXT:  SQL statement "SELECT (SELECT "Content".date FROM "Content" WHERE "Content".id = NEW.idAnswer) < (SELECT "Content".date FROM "Content" WHERE "Content".id = NEW.idQuestion)"
PL/pgSQL function "check_valid_date_answer" line 2 at IF
Run Code Online (Sandbox Code Playgroud)

触发:

CREATE TRIGGER check_valid_answer 
AFTER INSERT ON …
Run Code Online (Sandbox Code Playgroud)

sql postgresql triggers database-design constraints

7
推荐指数
1
解决办法
9311
查看次数