Итак, у нас есть приложение, которое обращается ко многим хранимым процессам в SQL Server 2008 R2.Большинство хранимых процедур являются простыми CRUD-типами (т.е. не требуют использования транзакций) и возвращают некоторые хорошие объекты ResultSet в код Java.
Однако у нас есть один или два более сложных, которые используют транзакции в пределахсохраненный процессПохоже, они не возвращают ResultSets при выборе информации в конце транзакции?
Например, в хранимых процессах происходит что-то вроде следующего:
ParentStoredProc;
call generationStoredProc to generate a unique code
begin transaction
call childProc1 using generated code to insert some data
call childProc2 using generated code to insert some data
commit transaction
select something from recently inserted data using generated code
Кажется разумным?Генерирует значение ключа, атомарно вставляет данные в две разные таблицы, используя транзакцию, отбирает часть этих данных и возвращает их в качестве результата для родительского хранимого процесса.На самом деле он прекрасно работает, когда вызывается из SQL Server Management Studio, результаты отображаются точно так же, как и любые другие операции выбора, которые ранее не включали транзакцию.
Проблема заключается в том, что когда код Java пытается вызвать этот кодс использованием подготовленных операторов и метода execute (который прекрасно захватывает ResultSets для всех остальных хранимых процедур), ResultSet не возвращается, если возвращаться?
Так как parentStoredProc возвращается в код Java, как только видиттранзакция начинается.
Кто-нибудь знает, почему это происходит и как получить результаты из окончательного выбора, который прекрасно возвращается в управляющей студии, чтобы вернуться в Java-приложение callableStatement.execute ()?