CREATE TABLE mytable
(
x int not null,
y char(1) not null,
constraint CK_mytable_myrules CHECK (
1 = CASE
WHEN x=5 AND y='a' THEN 1
WHEN x=12 AND y='b' THEN 1
/* More rules here */
ELSE 0 END
)
A CASE выражение всегда должно возвращать значение .Логические значения не являются частью SQL.
Или, если общим правилом является «если мы не выполнили ни одно из этих правил, пропустите его», то у вас есть два варианта - вложенные CASE или«запасные» правила (мой собственный, только что придуманный термин):
вложенные СЛУЧАИ:
1 = CASE
WHEN x=5 THEN
CASE WHEN y='a' THEN 1
ELSE 0 END
WHEN x=12 THEN
CASE WHEN y='b' THEN 1
ELSE 0 END
/* More rules here */
ELSE 1 END
или другой способ:
1 = CASE
WHEN x=5 AND y='a' THEN 1
WHEN x=5 THEN 0
WHEN x=12 AND y='b' THEN 1
WHEN x=12 THEN 0
/* More rules here */
ELSE 1 END