使用OUTPUT获取SQLite插入行ID报错:SQLITE_ERROR: near "OUTPUT": syntax error
解决SQLite插入时获取新行数据的问题
你遇到的SQLITE_ERROR: near "OUTPUT": syntax error是因为**OUTPUT是SQL Server的专属语法**,SQLite并不支持这个子句。在SQLite中,要实现插入后返回新行数据的需求,需要用RETURNING子句来替代。
修改后的代码示例
把原SQL语句中的OUTPUT INSERTED.*替换成RETURNING *(如果只需要ID可以写RETURNING id),调整后的代码如下:
global.db.all( `INSERT INTO articles(creation_date, publish_date, last_modified_date, title, subtitle, article_text, likes, author_id, published) VALUES (CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, ?, ?, ?, ?, ?, ?) RETURNING *;`, newValues, function (err, rows) { if (err) { next(err); //send the error on to the error handler } else { res.json({message: "Saved", newRow: rows[0]}); // rows是数组,取第一个元素即为新行数据 } } );
注意事项
RETURNING子句要求SQLite版本在3.35.0及以上(2021年发布),如果你的SQLite版本过低,需要先升级版本。- 如果无法升级版本,也可以分两步操作:先执行INSERT语句,再用
SELECT * FROM articles WHERE id = last_insert_rowid();查询刚插入的行,但这种方法在并发场景下可能存在数据不一致的风险。
内容的提问来源于stack exchange,提问作者Ryolu
相关产品推荐
相关产品推荐

