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

Node.js使用mssql查询SQL Server渲染option显示undefined的解决方法

问题产生原因

代码里存在两个核心错误,直接导致取值返回undefined:

  • mssql包的查询返回值result是完整的响应对象,并非直接返回查询到的数据行数组,实际的行数据存储在result.recordset属性中。直接遍历result对象,拿到的是recordsets、output、rowsAffected这类对象自身的属性名,根本不是单行数据。
  • 使用了for...in语法做遍历,该语法的设计用途是遍历对象的可枚举键名,哪怕直接遍历数组,拿到的data也只是数组索引的字符串值(比如"0"、"1"),不是数组里存储的元素对象,自然读不到Pdf_Filename、SKU这类列属性。
可落地修复方案

只需要调整结果取值逻辑和遍历方式即可,修正后的完整代码如下:

const query = () =>{
    let output = ``
    sql.connect(config).then(pool => {
        return pool.request()
            .query('SELECT Pdf_Filename, SKU FROM RDCProductLabels WHERE PDF_Filename is not null Order by SKU')
    }).then(result => {
        // 取出实际存储查询行的数组
        const rowList = result.recordset
        // 用for...of直接遍历数组元素,拿到每一行的数据对象
        for(const data of rowList){
            output +=`
                        <option value="${data.Pdf_Filename}">
                            ${data.SKU}
                        </option>
                     `
        }
        console.log(output)
    }).catch(err => {
       console.log(`数据库操作出错 - ${err}`)
    });
}

额外提示:如果后续遇到同类数据库返回值取值问题,可以先打印result对象确认结构,避免找错数据存储位置;如果担心列名大小写匹配问题,可以在SQL查询时统一给列设置别名,降低大小写不一致导致的取值失败概率,当前问题和列名本身的正确性无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:33:17