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

NodeJS处理MSSQL查询结果:如何生成JSON数组并写入文件

解决思路

方案一:流式模式下收集数据生成JSON数组

你开启了stream: true后,查询结果会通过row事件逐行返回,只需先把所有行数据收集到数组中,等全部数据接收完成后,再将整个数组转为JSON字符串写入文件即可:

修改后的代码示例:

const sql = require('mssql');
const fs = require('fs');

const config = {
    // 你的数据库配置
};

// 初始化数组存储所有行数据
let rows = [];

sql.connect(config, err => {
    if (err) {
        console.error('数据库连接失败:', err);
        return;
    }

    const request = new sql.Request();
    request.stream = true;
    request.query(fs.readFileSync('./new-query.sql').toString());

    // 逐行收集数据
    request.on('row', row => {
        rows.push(row);
    });

    request.on('error', err => {
        console.error('查询出错:', err);
        sql.close();
    });

    // 所有数据接收完成后,生成JSON数组并写入文件
    request.on('done', () => {
        const jsonArray = JSON.stringify(rows);
        fs.writeFile('./result.json', jsonArray, 'utf8', err => {
            if (err) {
                console.error('写入文件失败:', err);
            } else {
                console.log('JSON数组已成功写入文件');
            }
            sql.close();
        });
    });
});

方案二:关闭流式模式直接获取完整结果集

如果查询返回的数据量不大,可以关闭stream: true,直接通过Promise获取完整结果集,代码会更简洁:

const sql = require('mssql');
const fs = require('fs').promises; // 使用Promise版本的fs处理异步操作

const config = {
    // 你的数据库配置
};

sql.connect(config)
    .then(pool => {
        return pool.request().query(fs.readFileSync('./new-query.sql').toString());
    })
    .then(result => {
        // result.recordset就是查询结果的对象数组
        const jsonArray = JSON.stringify(result.recordset);
        return fs.writeFile('./result.json', jsonArray, 'utf8');
    })
    .then(() => {
        console.log('JSON数组已成功写入文件');
        sql.close();
    })
    .catch(err => {
        console.error('出错:', err);
        sql.close();
    });

注意事项

  • 确保数据库配置(服务器地址、库名、账号密码等)正确无误
  • 若处理大数量级数据,优先用方案一的流式模式,避免内存占用过高
  • 写入文件时要处理异步错误,防止遗漏异常情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:55:19