Я пытаюсь обновить определенный набор строк с конкретной информацией. Это означает, что я не могу выполнить простой оператор обновления, но вместо этого нужно будет указать строки, которые я хочу изменить, и значения, по которым я буду их исправлять. Короче говоря, я хочу обновить столбец дат, которые в настоящее время не соответствуют соответствующему параметру; Следующее утверждение, таким образом, кажется логичным:Исключение строк в обновлении 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
Я пробовал это снова с использованием дополнительного параметра - cp.parametercategory, который ограничивает обновляемые строки тем, что я хочу. Спасибо за ваше решение. – user1353787