仅更新sqlite3数据库

问题描述 投票:1回答:1

我想以一种将表中的值保留为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'
}
javascript node.js sqlite
1个回答
0
投票

我发现了两种方法:

使用缩略词一个

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= ? ;
© www.soinside.com 2019 - 2024. All rights reserved.