Вы должны либо указать 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
.