La procédure stockée SQL Server 2012 ne renvoie aucun résultat dans JDBC

J'ai une procédure stockée dans SQL Server 2012 qui a quelques parameters incluant les parameters de type table, SQL Server 2012 ne supporte pas les parameters de type table J'ai écrit une autre procédure stockée en définissant des valeurs par défaut pour ce paramètre de type table paramètre pour la nouvelle procédure

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 

J'ai écrit un code java pour exécuter cette procédure stockée, je suis capable d'établir la connection, mais la méthode execute () renvoie toujours false. Le code java est comme ci-dessous

  Ssortingng finalSql = "{ call usp_rpt_sprocexecution(?) } "; CallableStatement cs = connection.prepareCall(finalSql); cs.setSsortingng(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.getSsortingng(1)); } 

Lorsque j'exécute cette même procédure stockée dans Management Studio, elle renvoie la table de résultats correcte.

La procédure renvoie des messages comme 1 ligne (s) affectée qui est traitée comme une sortie de procédure stockée en java, ce qui réduit le résultat d'origine.

L'astuce simple était d'append SET NOCOUNT ON au début de la procédure stockée afin qu'il ne renvoie pas de tels messages et renvoie donc la sortie réelle.