我想以一种将表中的值保留为null的属性的方式更新数据,而仅更改具有新值作为参数的属性。
这是我的请求,当我的对象中有空值时,它将向我发送错误消息:
/* THE OBJECT */
let chick = { ID: 3, name: null, lastname: 'soup', phone: '60-58-22-12', password: null , mail: '[email protected]' }
/* UPDATE REQUEST */
this.state._stmt = db.prepare("UPDATE user SET
name = CASE WHEN (? = NULL) THEN name ELSE ? END ,
lastname = CASE WHEN (? = NULL) THEN lastname ELSE ? END ,
phone= CASE WHEN (? = NULL) THEN phone ELSE ? END ,
password = CASE WHEN (? = NULL) THEN password ELSE ? END,
mail = CASE WHEN (? = NULL) THEN mail ELSE ? END
WHERE ID=? ;");
this.state._stmt.run(obj.name, obj.name, obj.lastname, obj.lastname , obj.phone, obj.phone, obj.password, obj.password, obj.mail, obj.mail, obj.ID);
/
/ *我得到的错误是:* /
[Error: SQLITE_CONSTRAINT: NOT NULL constraint failed: user.name
Emitted 'error' event on Statement instance at:
] {
errno: 19,
code: 'SQLITE_CONSTRAINT'
}
我发现了两种方法:
使用缩略词一个
this.state._stmt = db.prepare("UPDATE user SET
name = COALESCE(?, name) ,
lastname = COALESCE(?, lastname) ,
phone= COALESCE(?, phone) ,
password = COALESCE(?, password),
mail = COALESCE(?, mail)
WHERE ID=? ;
");
保留我的请求,但更改条件NULL->'null'
UPDATE user
SET name = CASE
WHEN ? != 'null' THEN ?
ELSE name END
WHERE ID= ? ;