2016-06-10 43 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 ..如果回答應該給狗仔隊信用。他指出,子查詢沒有返回任何行來更新。 –