我正从JAVA调用MsSql程序,使用以下代码创建发票:
CallableStatement cstmt = conn.prepareCall(sql);
cstmt.registerOutParameter(1, java.sql.Types.VARCHAR);
cstmt.execute();
resultValue = cstmt.getString(1);
…
在我的程序中,我使用select @cErrorOut;
进行调试。
但是如果我在上面的示例中使用select,那么捕获就在这里我没有从RAISERROR (@cErrorOut,16,1);
获得SqlException但是如果我删除select一切看起来没问题。如果我从ManagementStudio调用过程,我会得到一个错误,无论是否有选择。那是为什么?
这是工作而不是工作的例子:
由于select(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 server 2008 r2。