Я пытаюсь получить набор результатов из хранимой процедуры в SQL SERVER (я думаю, 2005) из моего приложения GRAILS.(Grails 1.3.2, Groovy 1.7.6)
Хранимая процедура прекрасно работает с любым браузером запросов, я использую SQLDBX, он возвращает набор результатов, как я ожидал все время.
Из моего приложения, однако, он выдаст ОШИБКУ, если процедура на самом деле изменяет данные, но если этого не произойдет, он не выдаст ОШИБКУ и вернет набор результатов, как мне хотелось бы.
Теперь я не могу опубликовать процедуру здесь, но это измененная версия.это делает примерно то же самое.
CREATE PROCEDURE [procedure1]
@year VARCHAR(4)
as
begin
DECLARE @var1 INT
DECLARE @var2 varchar(50)
DECLARE @counter INT
SET @counter=0
set @cursor = CURSOR FAST_FORWARD for
select *
FROM [table1] as t1
INNER JOIN [table2] as t2
ON t1.f_id = t2.f_id
WHERE t1.year = @year
open @cursor
set @date = GETDATE()
fetch next from @cursor into @var1,@var2
while @@FETCH_STATUS = 0
begin
select @numRows = count(id) from table1
if(@numRows = 0)
begin
SET @counter=@counter+1
END
fetch next from @cursor into @var1,@var2
end
close @cursor
deallocate @cursor
SELECT @counter AS 'count'
return 0
END
GO
Модифицированная версия не имеет особого смысла, но выполняет те же действия.
Из моего приложения GRAILS я делаю эквивалент
Sql conn = new Sql(dataSource) //A valid declaration
try{
def results = conn.rows("execute [dbo].[procedure1] @year='2011'")
println("${results}")
}
catch(SQLException e){
println(e.getMessage())
}
Каждый раз, когда это выполняется, и счетчик был изменен (иначе он не равен нулю), он выдает исключение.Однако, если я запускаю execute procedure1 @year='2011'
из SQLDBX, а счетчик не равен нулю, он возвращается, как я и ожидал.
Я также попробовал несколько различных методов из класса Groovy SQL, и все они, похоже,выбросить это исключение или не то, что я ищу.
Исключение составляет
com.microsoft.sqlserver.jdbc.SQLServerException - The statement did not return a result set.
Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.