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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:34:52