I have two simple scripts One is:
declare @active_from date = '01.03.2014'
declare @active_to date = '01.04.2014'
declare @house_id integer = 11927
----
declare @service_id integer
declare @addendum_id integer
declare @activity_id integer
declare @session_id integer
declare @cur_active_from datetime
declare @cur_active_to datetime
declare @session_license_fee_cur cursor
-- prepare cursor
set @session_license_fee_cur = cursor static for
select activity_id
, addendum_id
, service_id
, active_from
, active_to
from dbo.bills_supp_get_activate_license_fee_for_sessions_by_house(@active_from, @active_to, @house_id)
-- open cursor
open @session_license_fee_cur
fetch next from @session_license_fee_cur into @activity_id, @addendum_id, @service_id, @cur_active_from, @cur_active_to
while (@@FETCH_STATUS = 0)
begin
-- get next record
fetch next from @session_license_fee_cur into @activity_id, @addendum_id, @service_id, @cur_active_from, @cur_active_to
end
--
close @session_license_fee_cur
deallocate @session_license_fee_cur
It works less then one second. The second one is the same, but instead
set @session_license_fee_cur = cursor static for
I use
set @session_license_fee_cur = cursor for
Without "static". It works more than 1 minute. Why such difference in performance? The count record in query is about 3000