2011-09-02 46 views
1

我想同时更新10列以上,我的问题是我想把所有这些列的where子句。如何在同时更新多个列的同时将多个列放在where子句中?

我的代码是:

UPDATE Customer AS c 
        SET 
         name = a.name, 
         address= a.address, 
         telephone = a.telephone, 
         -- 
         -- 
         -- 


     FROM Customer a 
         INNER JOIN 
         (SELECT casenumber 
           , max(currentDate) AS md 
          FROM Customer 
          GROUP BY casenumber 
         ) AS z 
         ON z.casenumber = a.casenumber 
         AND z.md = a.currentDate 
        WHERE (a.casenumber = c.casenumber) 

在上述发言中,我要添加条件,以更新的列时,才不为0

为exmple,

UPDATE Customer AS C 
    SET name = a.name, 
    address= a.address, 
    ... 

    .. 
    WHERE a.name <> 0, 
      a.address <> 0, 
      a.telephone <> 0 
      .... 
      ... 

是有可能把哪里条件检查每列?

任何建议都感激..

回答

2

像这样的东西(假设name <> 0是一个错字,你的名字是真的字符列)

UPDATE customer AS c 
    SET name = CASE WHEN name <> '' THEN a.name ELSE name END, 
     address = CASE WHEN address <> '' THEN a.address ELSE address END 

这基本上更新列到它的当前值,如果它是空的。

请注意,这不处理NULL值!如果您需要同样处理NULL和'',则需要改为使用coalesce(name, '')

+0

Thanyou这个解决了我的问题,但你想念CASE后WHEN .. –

+0

谢谢,更正 –