sql-server – 什么可能导致SQL Server JDBC错误’输出参数访问的参数号0’没有设置值?

前端之家收集整理的这篇文章主要介绍了sql-server – 什么可能导致SQL Server JDBC错误’输出参数访问的参数号0’没有设置值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一些访问sql Server 2005的 Java代码,如下所示:
CallableStatement cstmt = ...;
... // Set input parameters
cstmt.registerOutParameter(11,Types.INTEGER);
cstmt.execute();
int out = cstmt.getInt(11);

从最后一行抛出以下异常:

com.microsoft.sqlserver.jdbc.sqlServerException: The value is not set 
     for the parameter number 0.
   at com.microsoft.sqlserver.jdbc.sqlServerException.
     makeFromDriverError(Unknown Source)
   at com.microsoft.sqlserver.jdbc.sqlServerCallableStatement.
     skipOutParameters(Unknown Source)
   at com.microsoft.sqlserver.jdbc.sqlServerCallableStatement.
     getOutParameter(Unknown Source)
   at com.microsoft.sqlserver.jdbc.sqlServerCallableStatement.
     getterGetParam(Unknown Source)
   at com.microsoft.sqlserver.jdbc.sqlServerCallableStatement.
     getInt(Unknown Source)
   at org.jboss.resource.adapter.jdbc.WrappedCallableStatement.
     getInt(WrappedCallableStatement.java:192)

调用的存储过程看起来像这样:

CREATE PROCEDURE dbo.stored_proc ( -- 10 input parameters,@out_param INT OUTPUT) AS

-- Variable declarations 

SET @out_param = 0

-- Do processing...

SET @out_param = 1

由于输入参数在进入存储过程时设置为零,在什么情况下可以设置该值?或者我误解了错误信息?

错误可通过以下方式重现:

> sql Server JDBC驱动程序1.2
> sql Server 2005(64位)Service Pack 2
> sql Server 2005(64位)Service Pack 3

更新:它似乎是由于 – 处理…存储过程的一部分而发生的.删除它可以消除错误.这里有太多的代码可以重现,我想要的是一些可能导致缩小可能候选人的原因.

更新:将错误(例如除以零)注入 – Do处理…部分存储过程不会导致抛出此异常(相反,正如预期的那样,execute()调用失败并显示相应的错误消息) .

更新:反编译com.microsoft.sqlserver.jdbc.sqlServerCallableStatement类建议’参数号0’是存储过程返回值.

更新:我无法通过Management Studio直接调用存储过程来重现此问题.

更新:此错误的最终原因似乎是存储过程中的死锁.但是,通常,死锁导致execute()调用失败,并带有sql Server错误代码1205的sqlException …

解决方法

在您的参数上,您只是声明它们还是将它们设置为默认值?尝试将它们设置为默认值null或其他东西,看看你是否仍然得到错误.

如果您没有将参数设置为默认值并且在执行存储过程时未向其传递值,则sql Server不喜欢它.

原文链接:https://www.f2er.com/mssql/78062.html

猜你在找的MsSQL相关文章