Нужно ли указывать NOT NULL в столбце с ограничением CHECK? - PullRequest
2 голосов
/ 23 апреля 2019
doctorName VARCHAR(50) CHECK(LEN(doctorName ) > 0)

Должен ли я указать NOT NULL в предыдущем объявлении? Значение NULL не будет разрешено, так как оно не пройдет ограничение CHECK ... Так какова цель указания NOT NULL в этом случае?

1 Ответ

4 голосов
/ 23 апреля 2019

Вы должны либо указать NOT NULL:

doctorName VARCHAR(50) NOT NULL CHECK(LEN(doctorName ))

, либо проверить ограничение:

doctorName VARCHAR(50) CHECK(LEN(doctorName ) > 0 AND doctorName IS NOT NULL)

Первое предпочтительнее, поскольку NOT NULL встроено в SQL, поэтомуоптимизатор может воспользоваться этим.

Зачем это нужно?Если имя NULL, то сравнение возвращает NULL.Ограничения CHECK работают иначе, чем предложения WHERE и выражения CASE.Ограничение CHECK не выполняется, только когда выражение оценивается как ЛОЖЬ.Таким образом, ИСТИНА и NULL удовлетворяют ограничению.С другой стороны, предложения WHERE и выражения CASE обрабатывают NULL как ЛОЖЬ, а не ИСТИНА.

Здесь - это пример db <> fiddle, показывающий, что NULLзначения не перехватываются ограничением check.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...