我有一个存储过程,它执行多次更新/插入。我从Java客户端使用Hibernate调用它的执行。我希望这段代码在java中引发异常,如果过程会引发错误(例如,如果其中一个语句由于约束违规而失败)。相当简单,不是吗?
java代码如下所示:
getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session s) throws HibernateException, SQLException {
SQLQuery query = s.createSQLQuery("exec myProc :date");
query.setTimestamp("date", new Timestamp(valDate.getTime()));
try {
query.executeUpdate();
} catch (HibernateException e) { ... } }
在程序中我插入此语句以模仿错误发生。
raiserror('this is bad', 11, 1);
如果这是第一个程序声明,它可以正常工作,所以如果我从mgmt studio调用它,输出看起来像这样:
消息50000,级别11,状态1,过程upd_position_list_hist,第85行 这很糟糕
Java代码捕获异常,一切正常。
但是,如果我将错误提升语句放在proc的中间 - 在它执行一些更新/插入之后 - 以便输出看起来像:
(0行(s)受影响) (1排受影响) (1排受影响) 消息50000,级别11,状态1,过程upd_position_list_hist,行 85这很糟糕
答案 0 :(得分:1)
set nocount on
应该解决这个问题,因为hibernate可能会在第一个结果之后停止读取结果,它不会期望来自单个查询的多个结果。
但是为什么你会首先使用hibernate来运行proc ..