Установите столбец в заполненной таблице, чтобы не допускать нулевых значений, если для множества строк уже задано нулевое значение - PullRequest
1 голос
/ 04 февраля 2011

У меня есть таблица с активным столбцом типа bit, которая в основном установлена ​​в нуль.Активный столбец был добавлен в качестве запоздалой мысли и по ошибке установлен для разрешения пустых значений.Поэтому SQL Server не позволит мне отключить флаг NULL, потому что большинство полей уже установлены в NULL.

Я попытался установить для столбца значение по умолчанию, равное 1, а затем убрать нулевой флаг, но у него ничего этого не было.Я думаю, что значение по умолчанию применяется только к вставкам, а не к alter.

Затем я попытался установить все нулевые значения в 1 явно с помощью следующего запроса:

Update cnc.aidPage set active = 1 where active = null

К сожалению это нене влияет на любые строки.Я попробовал производные этого и обнаружил, что это ничего не меняет, только когда фильтр пытается обнулить.Итак, следующая работа:

Update cnc.aidPage set active = 1 where active = 0
Update cnc.aidPage set active = null where active = 1

Буду признателен, если кто-нибудь скажет мне, почему фильтр не работает, если я проверяю нулевое значение или если есть более простой способ сделать отключение разрешающим нулем.

Ответы [ 4 ]

5 голосов
/ 04 февраля 2011

NULL не является значением - это заполнитель, указывающий на отсутствие какого-либо значения, поэтому вы не можете использовать математические операторы для его проверки. Вам необходимо использовать:

UPDATE cnc.aidPage 
   SET active = 1 
 WHERE active IS NULL
2 голосов
/ 04 февраля 2011

Ваша проблема в том, что "null" в большинстве реализаций SQL, в отличие от большинства императивных языков, ничем не "равно" NULL даже не равен NULL явно. Вы должны использовать специальный оператор "is", чтобы делать нулевые проверки:

Update cnc.aidPage set active = 1 where active is null

Это должно сработать для вас.

1 голос
/ 04 февраля 2011

NULL используется в качестве заполнителя для неизвестных или неприменимых значений.

Попытка:

Update cnc.aidPage set active = 1 where active is null
1 голос
/ 04 февраля 2011

Вы не можете использовать '=' для проверки на NULL.Вместо этого используйте 'IS NULL':

Update cnc.aidPage 
set active = 1
where active IS NULL 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...