Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用NodeJs插入SQL和使用params插入mssql库_Sql_Node.js_Sql Server_Node Mssql - Fatal编程技术网

如何使用NodeJs插入SQL和使用params插入mssql库

如何使用NodeJs插入SQL和使用params插入mssql库,sql,node.js,sql-server,node-mssql,Sql,Node.js,Sql Server,Node Mssql,我有两个数组,第一个包含insert的列,第二个包含de值 const columns = ['columnName1','columnName2','columnName3','columnName4','columnName5','columnName6']; const values2 = ['test1', 'test2', 27, 1, 'an address', null]; module.exports = {columns, values2} 我正在尝试使用mmsql库进行

我有两个数组,第一个包含insert的列,第二个包含de值

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:靠近“?”的语法不正确


我可以毫无问题地选择db,但语法有些地方似乎不太喜欢。

至少你忘了用圆括号括起来

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


由于我找不到一个示例,其中您将sql查询的参数传递给
query
函数,或者在其文档中使用
作为占位符,因此我不确定node 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);
var cols=['col1','col2'];
var VAL=['a string',23];
const request=pool.request();
for(设i=0;i`@param{i}`);
const result=wait request.query(sqlquery);

您试图指示多个列,但仅指示一个值:一个值数组。您应该指示insert中的列数。不是节点mssql的用户,但在我看来,您应该查看
.bulk
函数