Sails框架更新MSSQL数据库失败,报WHERE关键字语法错误
解决Sails框架操作MSSQL更新时的WHERE语法错误问题
我来帮你搞定这个更新报错的问题!先理清楚你的场景:你用Sails的User.update()方法尝试更新MSSQL数据库的用户数据,但遇到了Incorrect syntax near the keyword 'WHERE'的语法错误。
你的执行代码:
User.update({ id: 1 }, { id: 1, name: 'test' }).exec(function afterwards (err, user) { if (err) { console.log(err); } else { console.log("Users updated:", users); } });
报错信息:
2018-03-21T08:21:52.868Z - error: error: Error (E_UNKNOWN) :: Encountered an unexpected error RequestError: Incorrect syntax near the keyword 'WHERE'. at Connection.<anonymous> (D:\Project\WODevelopment\trunk\QMS3.0\POC\WideOrbit-Server\node_modules\sails-sqlserver\no...
问题原因分析
这个错误的核心原因是:你在更新的字段对象里重复传入了主键id。Sails的SQL Server适配器在生成UPDATE语句时,会把查询条件里的id:1作为WHERE子句的条件,同时又把更新对象里的id:1放到SET子句中,这会导致适配器生成不符合MSSQL语法的SQL语句,最终触发这个报错。
另外还有个小细节:你的回调函数参数是user,但console.log里写的是users,这会导致打印出undefined,顺手帮你指出来~
解决方案
1. 移除更新对象中的主键字段
这是最直接的解决方法,因为主键已经作为查询条件指定了,不需要在更新字段里重复传递。修改后的代码如下:
User.update({ id: 1 }, { name: 'test' }).exec(function afterwards (err, updatedUsers) { if (err) { console.log(err); } else { console.log("Users updated:", updatedUsers); } });
2. 升级Sails-SQLServer适配器版本
如果移除主键后还是报错,可能是你使用的sails-sqlserver适配器版本存在语法生成的bug。建议升级到最新稳定版:
npm update sails-sqlserver --save
3. 开启查询日志排查生成的SQL(可选)
如果问题依然存在,可以开启Sails的查询日志,查看适配器实际生成的SQL语句,方便定位具体语法问题。在config/models.js(或对应环境的配置文件,比如config/env/development.js)中添加日志配置:
module.exports.models = { connection: 'sqlserver', migrate: 'alter', log: true // 开启后会打印所有生成的SQL语句 };
内容的提问来源于stack exchange,提问作者Cyril Doss
相关产品推荐
相关产品推荐

