UFN_MKTSEGMENTATIONSEGMENT_ISRECORDCOUNTCACHECURRENT_2

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
@SEGMENTID uniqueidentifier IN
@DETECTEXTERNALCHANGES bit IN
@DETECTPREVIOUSSEGMENTCHANGES bit IN

Definition

Copy


CREATE function dbo.[UFN_MKTSEGMENTATIONSEGMENT_ISRECORDCOUNTCACHECURRENT_2]
(
  @SEGMENTID uniqueidentifier,
  @DETECTEXTERNALCHANGES bit = 1,
  @DETECTPREVIOUSSEGMENTCHANGES bit = 1    /* This parameter should only be disabled in cases when we are already looping through all the segments in order. */
)
returns bit
as
begin
  declare @SEGMENTATIONID uniqueidentifier;
  declare @SEQUENCE int;
  declare @SEGMENTTYPECODE tinyint;
  declare @ISVENDORMANAGED bit;
  declare @ISHISTORICAL bit;
  declare @ISCURRENT bit;

  select
    @SEGMENTATIONID = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID],
    @SEQUENCE = [MKTSEGMENTATIONSEGMENT].[SEQUENCE],
    @SEGMENTTYPECODE = [MKTSEGMENT].[SEGMENTTYPECODE],
    @ISVENDORMANAGED = dbo.[UFN_MKTSEGMENT_ISVENDORMANAGEDLIST]([MKTSEGMENT].[ID]),
    @ISHISTORICAL = [MKTSEGMENT].[ISHISTORICAL]
  from dbo.[MKTSEGMENTATIONSEGMENT]
  inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
  where [MKTSEGMENTATIONSEGMENT].[ID] = @SEGMENTID;


  if (@SEGMENTTYPECODE = 2 and @ISVENDORMANAGED = 1) or @SEGMENTTYPECODE in (6, 7, 8) or @ISHISTORICAL = 1 -- vendor managed segments, public media segments, historical segments

    set @ISCURRENT = 1;

  else if @SEGMENTTYPECODE = 3  --Revenue

    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);

  else  --Constituent, membership, sponsorship or imported list (exclude vendor managed lists from this consideration)

    begin
      if @DETECTPREVIOUSSEGMENTCHANGES = 1
        --Detect changes from any previous segments too...

        select @ISCURRENT = (
          case when exists(select top 1 *
                           from dbo.[MKTSEGMENTATIONSEGMENT]
                           inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
                           left join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[ID] = [MKTSEGMENT].[CURRENTSEGMENTLISTID]
                           left join dbo.[MKTSEGMENTATIONSEGMENTCACHEINFO] on [MKTSEGMENTATIONSEGMENTCACHEINFO].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
                           where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID
                           and [MKTSEGMENTATIONSEGMENT].[SEQUENCE] <= @SEQUENCE
                           and ([MKTSEGMENTATIONSEGMENTCACHEINFO].[RECORDCOUNTDATECACHED] is null or [MKTSEGMENTATIONSEGMENTCACHEINFO].[RECORDCOUNTDATECACHED] < dbo.[UFN_MKTSEGMENTATIONSEGMENT_GETLATESTREFRESHORCHANGEDATE]([MKTSEGMENTATIONSEGMENT].[ID], 1, @DETECTEXTERNALCHANGES))
                           and ([MKTSEGMENTLIST].[ID] is null or [MKTSEGMENTLIST].[TYPECODE] = 0))
          then 0 else 1 end);
      else
        --Only check the current segment for changes.  This should only be used in cases when we are already looping through all the segments in order.

        --So, this just avoids us from having the check the previous segments over and over again for each segment since we'll be checking them all anyhow.

        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);
    end

  return @ISCURRENT;
end