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

将Access迁移至SQL Server时INSERT语句报'?'附近语法错误求助

解决Access迁移SQL Server时INSERT语句的"incorrect syntax near '?'"错误

嘿,这个问题我之前迁移数据库的时候刚好踩过坑!根源其实很简单——Access和SQL Server的参数占位符规则不一样:

Access用?作为通用的参数占位符,但SQL Server要求使用带@前缀的命名参数,数据库引擎没法识别?这种写法,所以才会报语法错误。

解决方案步骤:

  • 替换SQL中的占位符:把所有的?替换成对应字段名的命名参数(前缀加@),修改后的SQL语句如下:
String sql = "INSERT INTO tblStudent(studentID,studentFirstName,studentLastName,studentPrefName,addressO1,addressO2,addressO3,addressO4,phoneO,phoneAltO,address1,address2,address3,address4,phone,phoneAlt,guardianID,agentID,emailAddress,schoolID,status) VALUES (@studentID,@studentFirstName,@studentLastName,@studentPrefName,@addressO1,@addressO2,@addressO3,@addressO4,@phoneO,@phoneAltO,@address1,@address2,@address3,@address4,@phone,@phoneAlt,@guardianID,@agentID,@emailAddress,@schoolID,@status)";
  • 确保用参数化方式执行:不管你用JDBC还是其他ORM框架,一定要通过参数绑定的方式设置值(比如JDBC的PreparedStatement.setXXX()方法),绝对不要直接把值拼进SQL字符串里——这不仅能解决语法问题,还能避免SQL注入风险。
  • 检查驱动版本:如果是用JDBC连接SQL Server,确认使用的是微软官方的最新版JDBC驱动,旧版本对?占位符的兼容可能有问题,更新驱动能避免很多奇怪的兼容性bug。

我当时就是直接把Access的SQL原封不动搬到SQL Server,结果报了一模一样的错,换成@命名参数后立马就正常执行了,你试试这个方案应该就能解决!

内容的提问来源于stack exchange,提问作者maximdj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:24:19