SQL Server '@P0'附近有语法错误

最近在用Nutz开发项目,在一次执行自定义分页的SQL时出现错误,截取部分报错信息如下:

### com.microsoft.sqlserver.jdbc.SQLServerException: '@P0' 附近有语法错误。
...
...
...
org.nutz.dao.DaoException: !Nutz SQL Error: 'SELECT TOP 10 * FROM Inventory'
PreparedStatement: 
'SELECT TOP ? * FROM Inventory'
CaseMessage='@P0' 附近有语法错误。

...

执行的SQL如下:

Sql sql = Sqls.create("SELECT TOP @record * FROM Inventory");
sql.params().set("record", 10);
this.dao.execute(sql);

后来查询资料得知SQL Server中查询使用Select Top ? * From TableName Where ColumnName = ?的SQL语句时,其中的问号?PreparedStatement预编译对象的参数占位符,需要使用setXX()系列方法对其赋值后再执行。

但是,Top后面是不允许使用问号?占位符的,@P0附近有语法错误就是由此引起的。

解决方案:

使用拼接字符串方式拼接SQL语句:

"Select Top " + record + " * From Inventory"

原文地址:https://www.lwhweb.com/2017/10/03/sql-server-near-p0-error/

    原文作者:lanweihong
    原文地址: https://www.jianshu.com/p/3a793f365030
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞