我正在从 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。