С первого размещения, это выглядит, как вы только хотел обновить P_C
если он был null
. В этом случае используйте P_C is null
. Нулевое значение никогда не равно (=) никому, включая другой нуль. Вы должны использовать is null
.
UPDATE Tnm_Lookup
SET P_C = 'C'
where Tnm_Lookup_ID in (
select top (355) Tnm_Lookup_ID
from Tnm_Lookup
where P_C is NULL
order by Tnm_Lookup_ID DESC)
Если вы ищете Tnm_Lookup_ID
только в верхних 355 строк всей таблице в порядке убывания, а затем, если Tnm_Lookup
имеет много строк, вы, вероятно, пропустить тот, который вы хотите. where P_C is null
помогает, потому что вы только возвращаете строки, где P_C
еще не обновлен.
По-прежнему рискованно ограничивать поиск фиксированным номером, если вы точно не знаете, что не будет больше 355 строк, ожидающих обновления.
Почему 355? Если только для эффективности, то это не стоит ускорять поиск, если он собирается пропустить случаи.
Это то, что вы хотели?
UPDATE Tnm_Lookup SET P_C = 'C'
where P_C is NULL
Если я угадал, то вы должны изменить вопрос, чтобы объяснить top (355)
.
Есть ли записи, где 'P_C = NULL'? Если вы запустили подзапрос сам по себе, он возвращает какие-либо записи? –
«Не работает», вы имеете в виду, что ничего не делает, или SQL Server сообщает об ошибке? Если это ошибка, что такое ошибка? –