我厌倦了添加一个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) 我有这样一张桌子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出现错误:
Run Code Online (Sandbox Code Playgroud)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
触发:
CREATE TRIGGER check_valid_answer
AFTER INSERT ON …Run Code Online (Sandbox Code Playgroud)