有没有办法可选地更新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=...
来更新记录。
答案 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 = ?