Express中用Tedious查询SQL Server,返回1行但recordset属性undefined?
问题排查:result.recordset[0].username 返回 undefined
环境配置
- Tedious驱动
- SQL Server身份验证
- SQL Server 2022 Express
trustServerCertificate = trueencrypt = false
相关代码
测试函数
export async function testFunc(): Promise<SQLUser | null > { try { const pool = await connect(); const request = pool.request(); const result = await request.query<SQLUser>("select 'blah222' ") } catch (e) { console.log(e) } }
SQLUser 接口定义 (SQLUser.model.ts)
export interface SQLUser { username: string; }
问题描述
执行上述代码后,rowsAffected = 1,但打印result.recordset[0].username时显示undefined。
原因及解决方法
问题出在SELECT语句未给查询结果的列指定与SQLUser接口匹配的名称。当前语句select 'blah222'执行后,SQL Server会返回一个无明确名称的列(或默认标识如(No column name)),而你的SQLUser接口期望的是名为username的属性,两者无法匹配,导致无法正确映射值。
只需修改SELECT语句,为列添加别名使其与接口属性名一致:
const result = await request.query<SQLUser>("select 'blah222' as username ")
这样查询返回的列名就是username,与SQLUser接口的属性对应,就能正常获取到result.recordset[0].username的值了。
内容的提问来源于stack exchange,提问作者whatwhatwhat
相关产品推荐
相关产品推荐

