我正在尝试使用特定信息更新特定的行选择。这意味着我不能执行简单的更新语句,而是必须指定我要更改的行以及我将修改它们的值。简而言之,我想根据相应的parameterid更新一列当前为null的日期;因此,以下陈述似乎合乎逻辑:
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 方面仍然相当缺乏经验,而且我确信我在某处遗漏了一个关键元素。你能帮忙吗?
最佳答案
应该这样做:
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
from contact c
INNER JOIN contactparameter cp on c.serialnumber = cp.serialnumber
WHERE cp.effectivefrom is not null
and cp.effectiveto is null
关于sql - 排除更新 SQL Server 2008 中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10299981/