2016-06-10 61 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语句洞察力

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

如果仅在顶部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)

2

这是否会返回任何记录?

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

它不是我在帖子中有错误的查询。我更新了。现在这个工作我永远不会改变表中的任何东西。 – user2516641

+1

真的,你在* real *查询中有“where Tnm_Lookup_ID = Tnm_Lookup_ID”吗? – Paparazzi

+0

User251 ..如果回答应该给狗仔队信用。他指出,子查询没有返回任何行来更新。 –