UFN_MKTSEGMENTATION_ISRECORDCOUNTCACHECURRENT

Returns whether or not the record count cache for a specified marketing effort segment is up-to-date.

Return

Return Type
bit

Parameters

Parameter Parameter Type Mode Description
@SEGMENTATIONID uniqueidentifier IN
@DETECTEXTERNALCHANGES bit IN

Definition

Copy


CREATE function dbo.[UFN_MKTSEGMENTATION_ISRECORDCOUNTCACHECURRENT]
(
  @SEGMENTATIONID uniqueidentifier,
  @DETECTEXTERNALCHANGES bit = 1
)
returns bit
as
begin
  declare @ISCURRENT bit = 1;
  declare @MAILINGTYPECODE tinyint;
  declare @ACTIVE bit;
  declare @SEGMENTID uniqueidentifier;

  select
    @MAILINGTYPECODE = [MAILINGTYPECODE],
    @ACTIVE = [ACTIVE]
  from dbo.[MKTSEGMENTATION]
  where [ID] = @SEGMENTATIONID;

  if @MAILINGTYPECODE <> 4 and @ACTIVE = 0
    begin
      --Loop through the segments in reverse order because this gives us a better chance of finding a segment that is not current.

      --Ignore vendor managed list segments because they are always current.

      --Ignore historical segments because they are always current.

      declare SEGMENTS cursor local fast_forward for
        select [MKTSEGMENTATIONSEGMENT].[ID]
        from dbo.[MKTSEGMENTATIONSEGMENT]
        inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
        left join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[ID] = [MKTSEGMENT].[CURRENTSEGMENTLISTID]
        where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID
        and ([MKTSEGMENT].[SEGMENTTYPECODE] <> 2 or ([MKTSEGMENT].[SEGMENTTYPECODE] = 2 and [MKTSEGMENTLIST].[TYPECODE] = 0))
        and [MKTSEGMENT].[ISHISTORICAL] = 0
        order by [MKTSEGMENTATIONSEGMENT].[SEQUENCE] desc;

      open SEGMENTS;
      fetch next from SEGMENTS into @SEGMENTID;

      while (@@FETCH_STATUS = 0 and @ISCURRENT = 1)
      begin
        select @ISCURRENT = (
          case when exists(select top 1 *
                           from dbo.[MKTSEGMENTATIONSEGMENT]
                           left join dbo.[MKTSEGMENTATIONSEGMENTCACHEINFO] on [MKTSEGMENTATIONSEGMENTCACHEINFO].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
                           where [MKTSEGMENTATIONSEGMENT].[ID] = @SEGMENTID
                           and ([MKTSEGMENTATIONSEGMENTCACHEINFO].[RECORDCOUNTDATECACHED] is null or [MKTSEGMENTATIONSEGMENTCACHEINFO].[RECORDCOUNTDATECACHED] < dbo.[UFN_MKTSEGMENTATIONSEGMENT_GETLATESTREFRESHORCHANGEDATE]([MKTSEGMENTATIONSEGMENT].[ID], 1, @DETECTEXTERNALCHANGES)))
          then 0 else 1 end);

        fetch next from SEGMENTS into @SEGMENTID;
      end

      close SEGMENTS;
      deallocate SEGMENTS;
    end

  return @ISCURRENT;
end