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

如何统计MSSQL查询返回结果数?Discord.js开发求助

统计MSSQL查询结果数量的实现方法

先修正原代码的两个关键问题

  • 原代码里的.then('error', err => {})写法错误,Promise的错误处理必须用.catch()
  • 直接用字符串拼接username到SQL语句存在SQL注入风险,必须改用参数化查询

方法一:直接在SQL中统计数量(推荐,性能更优)

让数据库直接返回计数结果,无需传输全量数据,适合只需要验证结果数量的场景。因为原查询用了DISTINCT,统计时要对应使用COUNT(DISTINCT)保证结果准确:

const sqlConfig = {
  password: MSSQLPASSWORD,
  database: MSSQLDBTANK1,
  stream: false,
  options: {
    trustServerCertificate: true,             
    enableArithAbort: true,
    encrypt: true
  },
  port: 1433,
  user: MSSQLUSER,
  server: MSSQLIP,
};

sql.connect(sqlConfig)
  .then(async (pool) => {
    const countQuery = `
      SELECT COUNT(DISTINCT Active_Number.UserID) AS recordCount 
      FROM Active_Number (NOLOCK)
      INNER JOIN Sys_Users_Detail (NOLOCK) ON Active_Number.UserID = Sys_Users_Detail.UserID 
      WHERE Active_Number.ActiveID = 80004 AND Sys_Users_Detail.UserName = @username
    `;
    return pool.request()
      .input('username', sql.VarChar, username) // 参数化传入用户名,避免注入
      .query(countQuery);
  })
  .then((result) => {
    const count = result.recordset[0].recordCount;
    console.log(`查询到的记录数量:${count}`);
    // 根据数量做后续逻辑,比如判断是否已投票
    if (count > 0) {
      console.log('You have already voted');
    }
  })
  .catch((err) => {
    console.error('数据库查询出错:', err);
  });

方法二:获取全量结果后统计行数

如果需要保留查询的完整结果数据,同时统计数量,可以在拿到结果后通过result.recordset.length获取行数:

const sqlConfig = {
  password: MSSQLPASSWORD,
  database: MSSQLDBTANK1,
  stream: false,
  options: {
    trustServerCertificate: true,             
    enableArithAbort: true,
    encrypt: true
  },
  port: 1433,
  user: MSSQLUSER,
  server: MSSQLIP,
};

sql.connect(sqlConfig)
  .then(async (pool) => {
    const selectQuery = `
      SELECT DISTINCT * 
      FROM Active_Number (NOLOCK)
      INNER JOIN Sys_Users_Detail (NOLOCK) ON Active_Number.UserID = Sys_Users_Detail.UserID 
      WHERE Active_Number.ActiveID = 80004 AND Sys_Users_Detail.UserName = @username
    `;
    return pool.request()
      .input('username', sql.VarChar, username)
      .query(selectQuery);
  })
  .then((result) => {
    const count = result.recordset.length;
    console.log(`查询到的记录数量:${count}`);
    // 同时可以使用result.recordset中的完整数据
    if (count > 0) {
      console.log('You have already voted');
    }
  })
  .catch((err) => {
    console.error('数据库查询出错:', err);
  });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:03:37