USP_DATALIST_MKTSOURCECODEINCREMENTSEGMENTCODE

Displays a list of auto incremented source codes for a segment type.

Parameters

Parameter Parameter Type Mode Description
@PARTDEFINITIONVALUESID uniqueidentifier IN
@NUMBEROFCODESTORETURN int IN

Definition

Copy


create procedure dbo.[USP_DATALIST_MKTSOURCECODEINCREMENTSEGMENTCODE]
(
  @PARTDEFINITIONVALUESID uniqueidentifier = null,
  @NUMBEROFCODESTORETURN integer = 1
)
as
  set nocount on;

  declare @AUTOINCREMENTEDCODES nvarchar(max);
  declare @NEXTCODE nvarchar(10);
  declare @CODESINCREMENTED integer;
  declare @CODEEXISTS bit;
  declare @FORMAT nvarchar(10);

  select
    @FORMAT = [MKTSOURCECODEPARTDEFINITIONVALUES].[FORMAT]
  from dbo.[MKTSOURCECODEPARTDEFINITIONVALUES]
    inner join dbo.[MKTSOURCECODEPARTDEFINITION] on [MKTSOURCECODEPARTDEFINITION].[ID] = [MKTSOURCECODEPARTDEFINITIONVALUES].[MKTSOURCECODEPARTDEFINITIONID]
  where [MKTSOURCECODEPARTDEFINITIONVALUES].[ID] = @PARTDEFINITIONVALUESID;

  /* Get next code in the sequence */
  set @AUTOINCREMENTEDCODES = ''
  select @NEXTCODE = dbo.[UFN_MKTSOURCECODE_AUTOINCREMENTCODE](@PARTDEFINITIONVALUESID, 1);
  set @AUTOINCREMENTEDCODES = @NEXTCODE;
  set @CODESINCREMENTED = 1;
  set @CODEEXISTS = 0;

  /* This to make sure the maximum number of segments we check for unique codes is less than the total number of segments */
  declare @ROWCOUNT integer;
  declare @LOOPCOUNT integer;
  declare @MAXNUMBEROFCHECKSREACHED bit;
  set @LOOPCOUNT = 0;
  select @ROWCOUNT = count([CODE]) from dbo.[MKTSEGMENT] where [PARTDEFINITIONVALUESID] = @PARTDEFINITIONVALUESID;
  set @MAXNUMBEROFCHECKSREACHED = 0;

  while (@CODESINCREMENTED < @NUMBEROFCODESTORETURN)
  begin
    set @NEXTCODE = dbo.[UFN_MKTSOURCECODE_BUILDNEXTVALUE](@FORMAT, @NEXTCODE)
    set @CODEEXISTS = case when exists(select 1 from dbo.[MKTSEGMENT] where [CODE] = @NEXTCODE) then 1 else 0 end;

    /* To find next code, we use the last code found as a starting point */
    while (@CODEEXISTS = 1 and @MAXNUMBEROFCHECKSREACHED = 0)
    begin
      set @LOOPCOUNT = 0;
      set @NEXTCODE = dbo.[UFN_MKTSOURCECODE_BUILDNEXTVALUE](@FORMAT, @NEXTCODE)
      set @CODEEXISTS = case when exists(select 1 from dbo.[MKTSEGMENT] where [CODE] = @NEXTCODE) then 1 else 0 end;

      set @LOOPCOUNT += 1;
      if @LOOPCOUNT >= @ROWCOUNT
        set @MAXNUMBEROFCHECKSREACHED = 1;
    end

    set @AUTOINCREMENTEDCODES = @AUTOINCREMENTEDCODES + ',' + @NEXTCODE;
    set @CODESINCREMENTED += 1;
  end

  select @AUTOINCREMENTEDCODES;

  return 0;