使用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
相关产品推荐
相关产品推荐

