我試圖用特定信息更新某些行的選擇。這意味着我不能做一個簡單的更新語句,而是必須指定我想要更改的行和我將修改它們的值。簡而言之,我想更新一列相對於相應parameterid當前爲空的日期;因此,下面的語句似乎是合乎邏輯:排除更新SQL Server 2008中的行
UPDATE contactparameter
SET effectiveto = CASE parameterid
When '2887' Then '13-Aug-2012'
When '2896' Then '21-Feb-2012'
When '3008' Then '28-Oct-2012'
When '3272' Then '18-Jan-2013'
END
如果我再更新,所有未包括在該列表中的行,即其中parameterids不是「2887」,「2896」的所有行,「3008」或' 3272',然後被清空。我曾嘗試選擇我想在一個子查詢中更新的行:
UPDATE contactparameter
SET effectiveto = CASE parameterid
When '2887' Then '13-Aug-2012'
When '2896' Then '21-Feb-2012'
When '3008' Then '28-Oct-2012'
When '3272' Then '18-Jan-2013'
END
WHERE exists
(SELECT cp.parameterid
from contact c
INNER JOIN contactparameter cp on c.serialnumber = cp.serialnumber
WHERE cp.effectivefrom is not null
and cp.effectiveto is null)
但是,這不正是相同。我在使用SQL方面還相當缺乏經驗,並且我確信我缺少某個關鍵元素。能否請你幫忙?
謝謝您的回覆。這似乎與我的第二個解決方案相同,這會導致所有行都被更新。你知道這是爲什麼嗎? – user1353787 2012-04-25 14:28:35
我已經嘗試使用一個額外的參數 - cp.parametercategory這限制行更新到我想要的。感謝您的解決方案。 – user1353787 2012-04-25 15:18:43