从Java调用过程并使用RAISERROR引发异常

从Java调用过程并使用RAISERROR引发异常,java,sql-server-2008,stored-procedures,callable-statement,Java,Sql Server 2008,Stored Procedures,Callable Statement,我从JAVA调用MsSql过程,使用以下代码创建发票: CallableStatement cstmt = conn.prepareCall(sql); cstmt.registerOutParameter(1, java.sql.Types.VARCHAR); cstmt.execute(); resultValue = cstmt.getString(1); … 在我的程序中,我使用选择@cerrororout用于调试目的 但是,如果我使用上面示例中的select,我不会从RAISERRO

我从JAVA调用MsSql过程,使用以下代码创建发票:

CallableStatement cstmt = conn.prepareCall(sql);
cstmt.registerOutParameter(1, java.sql.Types.VARCHAR);
cstmt.execute();
resultValue = cstmt.getString(1);
…
在我的程序中,我使用
选择@cerrororout用于调试目的

但是,如果我使用上面示例中的select,我不会从
RAISERROR(@cerrororout,16,1)获得SqlException,那么问题就在这里但如果我删除选择,一切看起来都正常。若我从ManagementStudio调用该过程,无论是否选择,我都会收到预期的错误。为什么呢

以下是工作和不工作示例:

由于select(非OK)而未获得sql异常的示例:


我正在使用MsSql server 2008 r2。

您能显示准备好的语句的完整代码吗?@fge您是指sql变量的值吗?如果是的话,里面没有什么特别的东西,只有带exec过程调用的普通字符串变量。该值取决于发票项参数。所以我们有类似的东西:exec _createInvoiceItemsv1,v2,。。。。
-- create item  
EXEC dbo.pHE_MoveItemsCreAll @ahKey, @cIdent,@nQty, @cNote, @nhUserId, @nNo OUTPUT,@cErrorOut OUTPUT,@cStatus OUTPUT;  

select @cErrorOut;

-- check for error status
if (@cStatus <> 'T') begin
    EXEC dbo._CreateInvoiceRollback @ahKey;
    RAISERROR (@cErrorOut,16,1);
end;
-- create item  
EXEC dbo.pHE_MoveItemsCreAll @ahKey, @cIdent,@nQty, @cNote, @nhUserId, @nNo OUTPUT,@cErrorOut OUTPUT,@cStatus OUTPUT;  

-- check for error status
if (@cStatus <> 'T') begin
    EXEC dbo._CreateInvoiceRollback @ahKey;
    RAISERROR (@cErrorOut,16,1);
end;
select @anVat = anVAT from tHE_SetTax where acVATCode = @defaultVatCode;