SQL Server 2012存储过程不会在JDBC中返回任何结果

时间:2015-01-19 12:50:39

标签: java sql-server stored-procedures jdbc sql-server-2012

我在SQL Server 2012中有一个存储过程,它有一些参数,包括表类型参数,因为SQL server 2012不支持表类型参数我通过设置此表类型参数的默认值并且具有另一个存储过程只有varchar作为新程序的参数

DECLARE @pTempTable TABLE(

   region varchar(max),
   country varchar(max),
   username varchar(max),
   firstname varchar(max),
   lastname varchar(max),
   accessform varchar(max),
   accessmodule varchar(max),
   adate varchar(max),
   atime varchar(max)
 )

 BEGIN

  DECLARE @pTestFromDate DATETIME = '2008/01/01', @pTestToDate      DATETIME     = '2014/12/31'

   DECLARE @pCountryIds GuidsTableType
   INSERT @pCountryIds VALUES(NULL)

   DECLARE @pRegionIds GuidsTableType
   INSERT @pRegionIds VALUES(NULL)

   DECLARE @pUserId UNIQUEIDENTIFIER = NULL
   DECLARE @pModuleId UNIQUEIDENTIFIER = NULL

    insert into @pTempTable exec usp_rpt_UserAudit
   @RoleName = @pRoleName
  ,@pCountryIds=@pCountryIds
  ,@pRegionIds=@pRegionIds
  ,@pUserId=@pUserId
  ,@pModuleId=@pModuleId
  ,@pFromDate=@pTestFromDate
  ,@pToDate=@pTestToDate
  SELECT * from @pTempTable


END

GO

我编写了一个java代码来执行这个存储过程,我能够建立连接,但execute()方法总是返回false。 java代码如下

    String finalSql = "{ call usp_rpt_sprocexecution(?) } ";
    CallableStatement cs = connection.prepareCall(finalSql);
    cs.setString(1, "Super Administrator");
    System.out.println(cs.execute());
    int c=0;

    while(!((cs.getMoreResults() == false) && (cs.getUpdateCount() <= 1))){
        System.out.println(c++);
        ResultSet rs = cs.getResultSet();
        System.out.println(rs.getString(1));
    }

当我在Management Studio中执行相同的存储过程时,它会返回正确的结果表。

1 个答案:

答案 0 :(得分:3)

该过程返回受影响的1行的消息,这些消息在java中被视为存储过程输出,因此会减少原始结果。

简单的技巧是在存储过程的开头添加 SET NOCOUNT ON ,这样它就不会返回这样的消息,从而返回实际的输出。