如何统计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
相关产品推荐
相关产品推荐

