范围:为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