Sql语句洞察力

时间:2016-06-10 14:38:31

标签: sql tsql

 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);

我不明白为什么这句话之前有效,现在它将不再更新我的表格。任何人都可以告诉我为什么这不起作用?

2 个答案:

答案 0 :(得分:2)

这是否会返回任何记录?

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

答案 1 :(得分:0)

从您的第一个帖子开始,看起来您只想更新P_C,如果它是null。在这种情况下,使用P_C is null。 null值永远不等于(=)包括另一个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)

如果您只按降序排列整个表的前355行中的Tnm_Lookup_ID,那么如果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)