使用mssql-async执行顺序异步SQL查询时第二个查询未执行
解决mssql-async中第二个await查询不执行的问题
你的代码里第二个查询完全不执行,大概率是第一个查询后续的代码抛出了未捕获的错误,导致程序中断,根本没走到第二个查询的逻辑。结合你的场景,给你几个排查和解决的方向:
1. 强制添加错误捕获与空值检查
第一个查询如果没找到匹配数据,row会是null,这时候访问row._IDENTIFICATION会直接抛出错误,程序终止。必须先加try/catch捕获错误,同时检查row是否存在:
try { const row = await db.getrow( "SELECT [_TURN_TYPE],[_IDENTIFICATION] FROM _HANDSON_STATIONS WHERE _DESCRIPTION = @desc", { desc: "Montagem Motor de Partida" } ); console.log(row); // 先确认查询到数据,再提取属性 if (!row) { console.error("没找到符合条件的工位记录"); return; } const stationId = row._IDENTIFICATION; const turnType = row._TURN_TYPE; // 打印参数,确认值是否正确 console.log("第二个查询参数:", { date: dateFormat, station: stationId, turn: turnType }); const row1 = await db.getrow( "SELECT * FROM [_HANDSON_PRODUCTION_DATA] where _DATE = @date AND [_STATION_ID] = @station AND _TURN = @turn ORDER BY _INDEX ASC", { date: dateFormat, station: stationId, turn: turnType } ); console.log(row1); } catch (err) { console.error("查询过程出错:", err); }
2. 验证第二个查询的参数与SQL有效性
把打印出来的参数直接代入SQL语句,在数据库客户端(比如SSMS)里执行,看是否能正常返回结果:
- 检查
dateFormat的格式是否和数据库_DATE字段的类型匹配(比如datetime类型需要YYYY-MM-DD HH:MM:SS格式) - 确认
stationId和turnType的值在_HANDSON_PRODUCTION_DATA表中存在对应的记录
3. 检查数据库连接状态
如果上述步骤都没问题,可能是mssql-async的连接池出现了异常。可以尝试手动管理连接生命周期:
await db.connect(); try { // 这里放两个查询的完整代码 } finally { await db.close(); }
内容的提问来源于stack exchange,提问作者Patrick Sampaio
相关产品推荐
相关产品推荐

