3

我正在从 JAVA 调用 MsSql 程序以使用以下代码创建发票:

CallableStatement cstmt = conn.prepareCall(sql);
cstmt.registerOutParameter(1, java.sql.Types.VARCHAR);
cstmt.execute();
resultValue = cstmt.getString(1);
…

在我的程序中,我select @cErrorOut;用于调试目的。

但是,如果我像上面的示例那样使用 select,则问题就在这里,我不会从中得到 SqlExceptionRAISERROR (@cErrorOut,16,1);但是如果我删除 select,一切看起来都很好。如果我从 ManagementStudio 调用过程,无论是否选择,我都会收到预期的错误。这是为什么?

这是工作和不工作的例子:

由于选择(NOT OK),我们没有得到 sql 异常的示例:

-- 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;

我们得到 sql 异常(OK)的示例:

-- 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;

我正在使用 MsSql 服务器 2008 r2。

4

0 回答 0