You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 19:57:21