sql - 排除更新 SQL Server 2008 中的行

标签 sql sql-server-2008

我正在尝试使用特定信息更新特定的行选择。这意味着我不能执行简单的更新语句,而是必须指定我要更改的行以及我将修改它们的值。简而言之,我想根据相应的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/

相关文章:

sql-server - 基于 If then Else sql server 2008 将默认值添加到现有列

java - SQL 数据库和 Java

mysql - 为什么字符串搜索在 sybase 中区分大小写,而在许多其他数据库中则不区分大小写

java - Android Studio 空对象引用

mysql - 强制先更新然后在程序中选择

mysql - 在 MYSQL 中具有多个字段和空格的 LIKE 通配符

sql - 数据库间查询的性能(链接服务器之间)

sql-server-2008 - 将 Access 应用程序连接到不同服务器中的 SQL Server 的可能方法?

sql - MySQL比较来自同一列的计数

具有基于其他操作结果的操作的 MySQL 查询