更新SQL语句中的任何字段

时间:2013-10-04 17:40:16

标签: mysql sql

有没有办法可选地更新SQL语句中的任何字段?我只能做到这样的事情:

UPDATE Customer SET 
    ContactName = ?  <=== what to do here if ? is null???
,   CompanyName = ?  <=== what to do here if ? is null???
,   AddressId   = ?  <=== what to do here if ? is null???
,   ...
WHERE CustomerId = ?

由于包装层和MySQL的限制,它必须是单个语句。

为了澄清,我想创建一个语句,该语句将使用列出的字段的一个或多个非空值运行,并且仅更新值不为空的那些字段,而不保留其他字段。

这是一个RESTful更新API,我不希望为每个可能的字段组合单独声明,我不想要求API调用者提供记录中的每个字段,这将是笨拙的不会是面向未来的(添加字段会破坏现有的API调用)。因为它是一个REST API,我希望映射POST /customer/xxx?ContactName=...&CompanyName=...来更新记录。

3 个答案:

答案 0 :(得分:1)

目标并不完全清楚,但我认为您正在寻找coalesce功能;它将返回第一个非空值:

  

的MySQL&GT; SELECT COALESCE(NULL,1); - &GT; 1

     

的MySQL&GT; SELECT COALESCE(NULL,NULL,NULL); - &GT; NULL

因此,如果值为null,您可以设置'default':

UPDATE Customer SET 
    ContactName = COALESCE(?, <Some default>)
...

如果您不想更改字段,只需使用当前值:

UPDATE Customer SET 
    ContactName = COALESCE(?, ContactName)

答案 1 :(得分:0)

如果参数在更新中为null,通常您会想要使用现有值:

UPDATE Customer SET 
    ContactName = COALESCE(?,ContactName)

答案 2 :(得分:0)

UPDATE Customer SET 
    ContactName = ifnull(?,ContactName)
,   CompanyName = ifnull(?,CompanyName)
,   AddressId   = ifnull(?,AddressId)
WHERE CustomerId = ?

SQL Fiddle