USP_SPONSORSHIPOPPORTUNITY_RESERVE_SELECTION

Calculates the number of children to be used in a balanced selection

Parameters

Parameter Parameter Type Mode Description
@KEY int IN
@MINSELECTION int IN
@MULTIPLIER int IN

Definition

Copy


CREATE procedure dbo.USP_SPONSORSHIPOPPORTUNITY_RESERVE_SELECTION (
    @KEY int,
    @MINSELECTION int,
    @MULTIPLIER int)
as
begin    

declare @COUNTID uniqueidentifier
declare    @SELECTEDCOUNT int = 0
declare @INITIALSUM int = 0
declare @NEWSUM int = 0
declare test_cursor cursor local forward_only for      
    select ID from #SPONSORSHIPOPPORTUNITYRESERVATIONCOUNTS    

declare @CHANGEAGENTID uniqueidentifier;
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

select @INITIALSUM = SUM(INITIALCOUNT) from  #SPONSORSHIPOPPORTUNITYRESERVATIONCOUNTS
select @NEWSUM = SUM(NEWCOUNT) from  #SPONSORSHIPOPPORTUNITYRESERVATIONCOUNTS

if @KEY <> 0
 begin
    if @MULTIPLIER * @MINSELECTION < @KEY
     begin  
      if @INITIALSUM - @NEWSUM <= @KEY
       begin
        update #SPONSORSHIPOPPORTUNITYRESERVATIONCOUNTS
        set NEWCOUNT = INITIALCOUNT
        where INITIALCOUNT > NEWCOUNT
       end
      else
       begin
         open test_cursor;
            fetch next from test_cursor into
             @COUNTID;     
         while (@@FETCH_STATUS = 0) and @SELECTEDCOUNT < @KEY
            begin             
              update #SPONSORSHIPOPPORTUNITYRESERVATIONCOUNTS
              set NEWCOUNT = NEWCOUNT + @MINSELECTION
              where ID = @COUNTID
              and INITIALCOUNT > NEWCOUNT

              if @@ROWCOUNT <> 0
               begin
                set @SELECTEDCOUNT = @SELECTEDCOUNT+@MINSELECTION
               end    

              fetch next from test_cursor into
              @COUNTID;
            end       
          close test_cursor;  
          deallocate test_cursor;       

          set @KEY = @KEY - @SELECTEDCOUNT
          set @MULTIPLIER = 0
          set @MINSELECTION = 1    

          exec  dbo.USP_SPONSORSHIPOPPORTUNITY_RESERVE_SELECTION @KEY, @MINSELECTION, @MULTIPLIER       
        end              
      end  
     else if @MULTIPLIER * @MINSELECTION > @KEY
      begin
       if @KEY < @MULTIPLIER
        begin
            set @MULTIPLIER = 0
            set @MINSELECTION = 1    

            exec  dbo.USP_SPONSORSHIPOPPORTUNITY_RESERVE_SELECTION @KEY, @MINSELECTION, @MULTIPLIER
        end
       else
        begin
            update #SPONSORSHIPOPPORTUNITYRESERVATIONCOUNTS
            set NEWCOUNT = FLOOR(@KEY/@MULTIPLIER)

            set @KEY = @KEY - (FLOOR(@KEY/@MULTIPLIER) * @MULTIPLIER)
            set @MULTIPLIER = 0
            set @MINSELECTION = 1

            exec  dbo.USP_SPONSORSHIPOPPORTUNITY_RESERVE_SELECTION @KEY, @MINSELECTION, @MULTIPLIER         
        end
      end 
      else
       begin
         update #SPONSORSHIPOPPORTUNITYRESERVATIONCOUNTS
         set NEWCOUNT = @MINSELECTION    
       end 
 end    

    return 0
end