Java Spring Boot中SQL Server原生查询动态设置TOP值报错求助
解决SQL Server原生查询动态TOP数量的语法错误
方法1:给TOP参数添加括号
SQL Server要求当TOP后使用变量/参数指定数量时,必须将参数包裹在括号中。修改你的查询语句如下:
@Query(nativeQuery = true, value = "SELECT TOP (:count) caller_id from Call_details where date = :todayDate group by caller_id ORDER by COUNT(*) DESC") List<String> findTopCallerByDate(@Param("count") int count, @Param("todayDate") Date todayDate);
方法2:使用ROW_NUMBER()窗口函数(更灵活)
如果需要更复杂的排序或过滤逻辑,推荐使用窗口函数实现:
@Query(nativeQuery = true, value = "SELECT caller_id FROM (" + "SELECT caller_id, ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) AS rn " + "FROM Call_details WHERE date = :todayDate GROUP BY caller_id" + ") t WHERE rn <= :count") List<String> findTopCallerByDate(@Param("count") int count, @Param("todayDate") Date todayDate);
错误原因
SQL Server的TOP语法规则中,直接使用未加括号的参数(如TOP ?)会导致语法解析错误,数据库无法识别该参数作为有效的数量值,必须通过括号明确标记参数的作用范围。
内容的提问来源于stack exchange,提问作者Arun Kumar
相关产品推荐
相关产品推荐

