如何使用NodeJs和带有params的mssql库在SQL中插入



我有两个数组,第一个包含插入的列,第二个包含去值

const columns = ['columnName1','columnName2','columnName3','columnName4','columnName5','columnName6'];
const values2 = ['test1', 'test2', 27, 1, 'an address', null];
module.exports = {columns, values2}

我正在尝试使用mmsql库进行插入,但文档中甚至没有包含一个包含多列的示例来插入值。

这是我插入的样本

let pool = await sql.connect(config)

const result = await pool.request().query(`INSERT INTO [Test].[TableName] (${testData.columns}) VALUES ?`, [[testData.values2]]);
console.dir(result);

我得到以下错误:

RequestError:"?"附近的语法不正确。

我可以毫无问题地选择数据库,但它似乎不喜欢语法。。

至少你忘了用圆括号包装?

const result = await pool.request().query(`INSERT INTO [Test].[TableName] (${testData.columns}) VALUES (?)`, [[testData.values2]]);

由于我找不到任何一个示例,即将sql查询的参数传递给query函数或在其文档中使用?作为占位符,我不确定节点mssql是否支持这一点。但如果是这样,则至少应该在sql语句中创建与添加值一样多的?

var cols = [...]; //your columns
const sqlquery = `insert into sometable (${cols}) values (${new Array(cols.length).fill('?')})`;

记录的方法是使用输入参数

await pool.request()
.input('p1', sql.Int, value1)
.input('p2', sql.VarChar(50), value2)
.query('insert into sometable(col1, col2) values(@p1, @p2)');

为了保持这种灵活性,你可以使用以下

var cols = ['col1', 'col2'];
var vals = ['a string', 23];
const request = pool.request();
for (let i = 0; i < vals.length; i++)
request.input(`param_${i}`, vals[i]);  //if you skip the parametertype, mssql will guess it from the value
const sqlquery = `insert into sometable(${cols}) values (${vals.map((_,i) => `@param_${i}`)`;
const result = await request.query(sqlquery);

最新更新