最近在用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
附近有语法错误就是由此引起的。