范围:为INSERT语句绑定或列超出范围


我没有发现你发布的信息有任何明显的错误,但是你没有发布实际的.raw()语句,这将有助于调试。

所以试图提供帮助,我会建议你添加一个.on('query-error' ... ...子句,它会记录失败的SQL,很多时候这会使问题变得明显。

knex.raw(...your-stuff...)
    .on('query-error', function(ex, obj) {
        console.log("KNEX-query-error ex:", ex, "obj:", obj);
    })

祝你好运!


这个问题源自SQLite3缺乏对每个exec()调用的多语句支持,如此处所述。

在完成一些测试后,我发现SQLite3引擎会自动将所有绑定分配给准备好的SQL的第一条语句 。 以下任何声明都将被忽略。

这仍然适用于交易,因为绑定将应用于'BEGIN TRANSACTION';' 声明而不是以下声明。

解决方案是使用带绑定的复合INSERT语句。

因此:

INSERT INTO `ds13odba` (FP59STALIB, ID, SURGERY_CODE, TYPE) VALUES (?,?,?,?);
INSERT INTO `ds13odba` (FP59STALIB, ID, SURGERY_CODE, TYPE) VALUES (?,?,?,?);
INSERT INTO `ds13odba` (FP59STALIB, ID, SURGERY_CODE, TYPE) VALUES (?,?,?,?);

变成这样:

INSERT INTO `ds13odba` (FP59STALIB, ID, SURGERY_CODE, TYPE)
  VALUES (?,?,?,?), (?,?,?,?), (?,?,?,?);

*请记住,复合INSERT语句仅适用于SQLite3引擎版本3.7.11。

链接地址: http://www.djcxy.com/p/19765.html

上一篇: RANGE: bind or column out of range for INSERT statement

下一篇: How do I prevent SQLite database locks?