2015-01-19 5 views
1

У меня есть хранимая процедура в SQL Server 2012, которая содержит несколько параметров, включая параметры табличного типа, так как SQL Server 2012 не поддерживает параметры типа таблицы. Я написал еще одну сохраненную процедура путем установки значений по умолчанию для этого параметра типа таблицы и имеющими только VARCHAR в качестве параметра для новой процедурыХранимая процедура SQL Server 2012 не возвращает результат в JDBC

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 
    ,@[email protected] 
    ,@[email protected] 
    ,@[email protected] 
    ,@[email protected] 
    ,@[email protected] 
    ,@[email protected] 
    SELECT * from @pTempTable 


END 

GO 

Я написал код Java для выполнения этой хранимой процедуры, я могу установить соединение, но выполнить() всегда возвращает 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, она возвращает правильную таблицу результатов.

+3

Попробуйте добавить 'SET NOCOUNT ON' к началу процедуры. Сообщения, такие как «1 строка (ы), затронутые», передаются обратно и, вероятно, интерпретируются как результирующие наборы. Это приведет к подавлению этих сообщений. – GarethD

+0

Большое спасибо @GarethD, который отлично работает сейчас. –

ответ

3

Процедура возвращает сообщения, похожие на 1 строку (строки), которые обрабатываются как выходные данные хранимой процедуры в java, и, следовательно, исключают исходный результат.

Простой трюк состоял в том, чтобы добавить SET NOCOUNT ON в начале хранимой процедуры, чтобы он не возвращал такие сообщения и, следовательно, возвращал фактический результат.

Смежные вопросы