2016-06-10 3 views
-4
UPDATE Tnm_Lookup SET 
    P_C = 'C' 
    where Tnm_Lookup_ID in (select top (355) Tnm_Lookup_ID from Tnm_Lookup where 
Tnm_Lookup_ID = Tnm_Lookup_ID order by Tnm_Lookup_ID DESC); 

Я не понимаю, почему это заявление работало до этого, и теперь оно больше не будет обновлять мою таблицу. Может ли кто-нибудь дать мне понять, почему это не работает?Sql statement insight

+2

Есть ли записи, где 'P_C = NULL'? Если вы запустили подзапрос сам по себе, он возвращает какие-либо записи? –

+2

«Не работает», вы имеете в виду, что ничего не делает, или SQL Server сообщает об ошибке? Если это ошибка, что такое ошибка? –

ответ

0

С первого размещения, это выглядит, как вы только хотел обновить 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).

2

хорошо ли это возвращает любые записи?

select top (355) Tnm_Lookup_ID 
from Tnm_Lookup 
where P_C = NULL 
order by Tnm_Lookup_ID DESC 
+0

У меня не было неправильного запроса в сообщении. Я обновил. Теперь это работает, я никогда ничего не меняю в таблице. – user2516641

+1

Действительно, у вас есть «где Tnm_Lookup_ID = Tnm_Lookup_ID» в запросе * real *? – Paparazzi

+0

User251 .. должен дать кредит папарацци, если ответить. Он указал, что подзапрос не возвращал никаких строк для обновления. –