Node.js服务SQL Server查询报错:无效列名%@param4%求解决建议
解决SQL Server查询“无效列名”报错问题
报错原因
你使用的mssql库模板字符串查询会自动对${}包裹的内容做参数化处理,当你写"%${input}%"时,库无法正确识别这是要给参数添加通配符,反而将%@param4%错误解析成了列名,因此抛出“Invalid column name '%@param4%'”的报错。
解决方法
方法1:提前给参数添加通配符
先将输入内容拼接上%,再传入查询语句:
async function searchBook(input){ const inputWithWildcard = `%${input}%`; let result = await sql.query `SELECT * FROM dbo.Books WHERE Title = ${input} OR Kind = ${input} OR Author = ${input} OR Title LIKE ${inputWithWildcard}` ; return result.recordset; }
方法2:在SQL中用CONCAT拼接通配符
通过SQL的CONCAT函数将%和参数拼接,避免模板字符串解析错误:
async function searchBook(input){ let result = await sql.query `SELECT * FROM dbo.Books WHERE Title = ${input} OR Kind = ${input} OR Author = ${input} OR Title LIKE CONCAT('%', ${input}, '%')` ; return result.recordset; }
额外优化提示
实际上Title = ${input}的精确匹配逻辑已经包含在Title LIKE %${input}%的模糊匹配中,如果你不需要区分精确和模糊,可以简化查询条件,减少重复逻辑。
内容的提问来源于stack exchange,提问作者Blago Damqnov
相关产品推荐
相关产品推荐

