我尝试使用knex raw方法在mysql上调用批量更新查询。
const ids:number[] = [1,2,3];
const values:string[] = ['apple', null, "orange"]
knex('testtable').raw(
`
UPDATE
TEST_TABLE
SET
COL1 = ELT(FIELD(id, :searchIds), :searchValues),
UPDATE_DATE = NOW()
WHERE ID IN (:searchIds)
`,
{ searchIds: ids, searchValues: values },
);`enter code here`
但是,未获得预期的结果。 这是因为值包含一个字符串和null,但是theraw方法的占位符不允许为null。 请告诉我,如何设置占位符为null?
答案 0 :(得分:0)
在knex中绑定值数组不能那样工作。 SQL具有多种类型的数组,因此不能将它们明确映射为SQL。
在文档中:https://knexjs.org/#Raw-Bindings是如何将值数组传递给knex的示例。
const myArray = [1,2,3]
knex.raw(
`select * from users where id in (${myArray.map(() => '?').join(',')})`,
[...myArray]
);
在这种情况下,使用命名绑定几乎是不可能的(实际上,命名绑定会转换为knex内的位置绑定,因此不会对性能造成影响)。