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语句洞察力
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语句洞察力
从你的第一份工作,它看起来你只是想更新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)
。
这是否会返回任何记录?
select top (355) Tnm_Lookup_ID
from Tnm_Lookup
where P_C = NULL
order by Tnm_Lookup_ID DESC
它不是我在帖子中有错误的查询。我更新了。现在这个工作我永远不会改变表中的任何东西。 – user2516641
真的,你在* real *查询中有“where Tnm_Lookup_ID = Tnm_Lookup_ID”吗? – Paparazzi
User251 ..如果回答应该给狗仔队信用。他指出,子查询没有返回任何行来更新。 –
是否有'P_C = NULL'的记录?如果你自己运行子查询,它是否会返回任何记录? –
通过“不工作”,你的意思是它什么也不做,或者SQL Server报告错误?如果这是一个错误,错误是什么? –