#sql #sql-server-2008
#sql #sql-server-2008
Вопрос:
У меня есть таблица, в которой 50 столбцов. 5 из них НЕ являются нулевыми, а остальные 45 могут быть NULL. now. добавлен 51-й столбец статуса.
Я хочу пометить запись как «сбой» в статусе, когда col6-col50 пусты.
col1-col5 всегда заполняются. но допустим, что из col6-col50 все значения null, затем отметьте запись как сбой в состоянии.
Хорошо, я знаю длинный путь.
update ..
...
where (col6 is null and col7 is null and.....)
Есть ли какой-либо другой возможный более короткий и эффективный способ?
Спасибо
Комментарии:
1. Я думаю, что ваши ответы будут отрицательными.
2. Это именно то, что я подумал.
3. «50 столбцов… 45 может быть нулевым… Я хочу пометить запись… Я знаю долгий путь …» — если вы считаете SQL DML сложным или сложным для написания, вам следует подумать о том, чтобы изменить свой SQL DDL .
Ответ №1:
Не намного лучше, но
update ..
...
where COALESCE(
col6,
col7,
...) IS NULL
Комментарии:
1. Будет ли ОБЪЕДИНЕНИЕ более эффективным, чем «РАВНО НУЛЮ»?
2. Должно быть очень близко, если не идентично. (Я думаю, это более эффективно в обслуживании.) Но у COALESCE есть большой недостаток: поля должны иметь один и тот же тип данных.
3. Вот что я понял. Теперь переключаем все коды на «IS NULL». В любом случае спасибо