微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

EJB 调用Sqlserver 存储过程报错,在sql server中执行却正常 top 2 解决方法

调用存储过程Query query = em.createNativeQuery("{call updateLoginofPassword(?,?,?)}"); 总是报错
17:13:15,796 INFO  [STDOUT] Hibernate:
   {call updateLo top 2ginofPassword(
 ?,?
 )}
17:13:15,890 WARN  [JDBCExceptionReporter] sql Error: 102,sqlState: S0001
17:13:15,921 ERROR [JDBCExceptionReporter] '{' 附近有语法错误
使用query.getSingleResult()方法会在sql增加top2  但是位置不对
改为getResultList后,也报错 结果没有返回集

 

发现原来2008的驱动会关注到存储过程执行过程中返回的“影响多少行”这些信息,有这些信息存在,就会抛出以上异常:
解决办法:在存储过程中的update语句前加“SET NOCOUNT 设为 ON ”,表示不返回计数(表示受 Transact-sql 语句影响的行数)

若这样还有问题
则在返回值前面加select 返回值 
比如return -1
前面加 select -1

就可以了

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐