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

使用mssql包时recordsets与recordset返回相同数据的原因

问题:mssql包中recordset与recordsets返回数据一致的疑问

我基于Node.js+Express框架,使用mssql npm包开发时发现,sql.request返回的recordsets和recordset包含完全相同的数据。按认知recordset应该只返回第一条记录,但实际并非如此。相关信息如下:

数据库表结构

Users表包含3个字段:ID(数值型)、UserName(字符串型)、Password(字符串型),现有2条记录:

  • ID: 0, UserName: admin, Password: admin
  • ID: 1, UserName: admin2, Password: admin2

代码示例

var sqlRequest = new sql.Request();

sqlRequest.query("select * from Users", function (err: any, result: any) {
  if (err) console.log(err);

  return OkReply("Records fetched", result);
});

返回结果

{
  "code": 200,
  "message": "Records fetched",
  "data": {
      "recordsets": [
          [
              {
                  "ID": 0,
                  "UserName": "admin",
                  "Password": "admin"
              },
              {
                  "ID": 1,
                  "UserName": "admin2",
                  "Password": "admin2"
              }
          ]
      ],
      "recordset": [
          {
              "ID": 0,
              "UserName": "admin",
              "Password": "admin"
          },
          {
              "ID": 1,
              "UserName": "admin2",
              "Password": "admin2"
          }
      ],
      "output": {},
      "rowsAffected": [
          2
      ]
    }
}

解答

这是mssql包的正常设计,不是bug:

  • recordsets是数组,存储所有查询结果集,如果执行多语句查询(比如select * from Users; select * from Roles;),它会包含多个数组元素,每个元素对应一个查询的结果。
  • recordset是recordsets[0]的快捷方式,直接返回第一个结果集的全部数据,而非单条记录。

如果需要获取第一条记录,直接从recordset中提取第一个元素即可:

const firstRecord = result.recordset[0];

你之前的认知偏差可能是混淆了其他数据库驱动的设计,mssql的recordset从始至终都是对应第一个结果集的完整数据集合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:52:22