А check constraint, как это будет делать спросите вы спросите:
ALTER TABLE YourTable ADD CONSTRAINT CK_open_date_before_close_date
CHECK (open_date < close_date);
Это будет отвергать любые транзакции, которые обновляют таблицу в состояние, которое нарушает условия. Если, например, вы обновили 5 строк, но только один из них нарушил ограничение, все обновление завершится неудачно.
Кроме того, я бы порекомендовал, что вместо NULL
за открытую дату закрытия вы используете оценочное значение 99991231
. Этому есть много причин, не последним из которых является выполнение запросов (поэтому вы можете делать простые заявления о неравенстве, не требуя предложения OR IS NULL
). Затем вы можете сделать столбец NOT NULL
и упростить вышеуказанное условие проверки. Это также позитивно влияет на внешний код приложения.
UPDATE
Проверочное ограничение не требует OR close_date IS NULL
в нем, так как если close_date
является NULL
, все выражение будет вычисляться в NULL
, и это не будет нарушать CHECK
ограничения.
Большое спасибо – Shmuli
Пожалуйста, смотрите [w3fools.com] (http://w3fools.com). – ErikE
Я попробовал, он говорит мне, что ограничение проверки столбцов не может ссылаться на другие столбцы. есть идеи? – Shmuli