You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js操作SQL Server不使用循环批量插入记录报错如何解决

问题原因与修复方案

你遇到的报错核心是数据库驱动的语法不匹配,结合你的代码细节和使用场景,分两种情况给出修复方案:

如果你使用的是MySQL数据库,对应mysql/mysql2驱动

你代码里混用了SQL Server驱动(mssql)的API,需要调整写法:

  1. 先移除request.input这类mssql专属方法,改用mysql驱动的连接/查询逻辑
  2. 修正SQL语句的字段包裹符号,MySQL默认不需要用双引号包裹字段名
  3. 批量插入的正确写法如下:
const insertQuery = 'INSERT INTO Role_User (role_ID, user_id) VALUES ?';
// 注意参数是把二维数组包一层传入,和你原有逻辑一致
connection.query(insertQuery, [roleUsers], function(err, result){
    if(err) throw err;
    console.log("成功插入,影响行数:" + result.affectedRows);
});

如果你使用的是SQL Server数据库,对应mssql驱动

mssql驱动不支持?占位符,也不支持直接传二维数组实现批量插入,有两种可行方案:

方案1:参数化拼接批量插入语句

// 生成对应组数的参数占位符
const valuePlaceholders = roleUsers.map((_, idx) => `(@role${idx}, @user${idx})`).join(',');
const insertQuery = `INSERT INTO Role_User (role_ID, user_id) VALUES ${valuePlaceholders}`;
// 批量绑定参数
roleUsers.forEach((item, idx) => {
  request.input(`role${idx}`, sql.Int, item[0]);
  request.input(`user${idx}`, sql.Int, item[1]);
});
// 执行查询
request.query(insertQuery, (err, result) => {
  if (err) throw err;
  console.log("插入成功");
});

方案2:使用bulk批量插入API(适合数据量较大的场景)

// 初始化表实例
const table = new sql.Table('Role_User');
table.create = false;
// 定义字段结构
table.columns.add('role_ID', sql.Int, {nullable: false});
table.columns.add('user_id', sql.Int, {nullable: false});
// 批量添加行数据
roleUsers.forEach(item => {
  table.rows.add(item[0], item[1]);
});
// 执行批量插入
request.bulk(table, (err, result) => {
  if (err) throw err;
  console.log("批量插入成功");
});

内容的提问来源于stack exchange,提问作者newnick988888

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:24:02