USP_PLANMAILINGSEARCH

Search for lowest level plan items.

Parameters

Parameter Parameter Type Mode Description
@MAXROWS smallint IN Input parameter indicating the maximum number of rows to return.
@MAILINGNAME nvarchar(100) IN Marketing effort name
@PLANID uniqueidentifier IN Plan
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.
@SITEID uniqueidentifier IN Site

Definition

Copy


CREATE procedure dbo.[USP_PLANMAILINGSEARCH]
(
  @MAXROWS smallint,
  @MAILINGNAME nvarchar(100) = null,
  @PLANID uniqueidentifier = null,
  @CURRENTAPPUSERID uniqueidentifier = null,
  @SITEID uniqueidentifier = null
)
as
  set nocount on;

  declare @TEMPTABLE table([ID] uniqueidentifier, [MAILING] nvarchar(100), [PLAN] nvarchar(256), [SITE] nvarchar(1024));

  declare MAILINGCURSOR cursor local fast_forward for
  select
    M.[ID],
    M.[NAME],
    M.[LEVEL],
    dbo.UFN_TRANSLATIONFUNCTION_SITE_GETNAME([P].[SITEID]) as [SITE]
  from
    dbo.[MKTMARKETINGPLANITEM] M
  inner join 
    dbo.[MKTMARKETINGPLAN] P on P.[ID] = M.[MARKETINGPLANID]
  where
     dbo.[UFN_SITEALLOWEDFORUSER](@CURRENTAPPUSERID, P.[SITEID]) = 1
  and
    M.[LEVEL] = (select max([LEVEL]) from dbo.[MKTMARKETINGPLANITEMTEMPLATEITEM] T where M.[MARKETINGPLANID] = T.[MARKETINGPLANID])
  and
    (@PLANID is null or M.[MARKETINGPLANID] = @PLANID)
  and
    (@SITEID is null or P.[SITEID] = @SITEID)
  and
    (M.[NAME] like coalesce(@MAILINGNAME, '') + '%')

  declare @ID uniqueidentifier;
  declare @NAME nvarchar(100);
  declare @LEVEL int;
  declare @SITE nvarchar(1024);

  open MAILINGCURSOR;
  fetch next from MAILINGCURSOR into @ID, @NAME, @LEVEL, @SITE;

  while (@@FETCH_STATUS = 0)
  begin
    declare @PLAN nvarchar(256);
    if (@LEVEL = 1)
    begin
      select
        @PLAN = [LEVEL0].[NAME]
      from
        dbo.[MKTMARKETINGPLANITEM] [LEVEL1]
      inner join
        dbo.[MKTMARKETINGPLANITEM] [LEVEL0] on [LEVEL0].[ID] = [LEVEL1].[PARENTMARKETINGPLANITEMID]
      where
        [LEVEL1].[ID] = @ID;
    end
    if (@LEVEL = 2)
    begin
      select
        @PLAN = [LEVEL0].[NAME] + ' / ' + [LEVEL1].[NAME]
      from
        dbo.[MKTMARKETINGPLANITEM] [LEVEL2]
      inner join
        dbo.[MKTMARKETINGPLANITEM] [LEVEL1] on [LEVEL1].[ID] = [LEVEL2].[PARENTMARKETINGPLANITEMID]
      inner join
        dbo.[MKTMARKETINGPLANITEM] [LEVEL0] on [LEVEL0].[ID] = [LEVEL1].[PARENTMARKETINGPLANITEMID]
      where
        [LEVEL2].[ID] = @ID;
    end
    if (@LEVEL = 3)
    begin
      select
        @PLAN = [LEVEL0].[NAME] + ' / ' + [LEVEL1].[NAME] + ' / ' + [LEVEL2].[NAME]
      from
        dbo.[MKTMARKETINGPLANITEM] [LEVEL3]
      inner join
        dbo.[MKTMARKETINGPLANITEM] [LEVEL2] on [LEVEL2].[ID] = [LEVEL3].[PARENTMARKETINGPLANITEMID]
      inner join
        dbo.[MKTMARKETINGPLANITEM] [LEVEL1] on [LEVEL1].[ID] = [LEVEL2].[PARENTMARKETINGPLANITEMID]
      inner join
        dbo.[MKTMARKETINGPLANITEM] [LEVEL0] on [LEVEL0].[ID] = [LEVEL1].[PARENTMARKETINGPLANITEMID]
      where
        [LEVEL3].[ID] = @ID;
    end
    if ( @LEVEL = 4 )
    begin
      select
        @PLAN = [LEVEL0].[NAME] + ' / ' + [LEVEL1].[NAME] + ' / ' + [LEVEL2].[NAME] + ' / ' + [LEVEL3].[NAME]
      from
        dbo.[MKTMARKETINGPLANITEM] [LEVEL4]
      inner join
        dbo.[MKTMARKETINGPLANITEM] [LEVEL3] on [LEVEL3].[ID] = [LEVEL4].[PARENTMARKETINGPLANITEMID]
      inner join
        dbo.[MKTMARKETINGPLANITEM] [LEVEL2] on [LEVEL2].[ID] = [LEVEL3].[PARENTMARKETINGPLANITEMID]
      inner join
        dbo.[MKTMARKETINGPLANITEM] [LEVEL1] on [LEVEL1].[ID] = [LEVEL2].[PARENTMARKETINGPLANITEMID]
      inner join
        dbo.[MKTMARKETINGPLANITEM] [LEVEL0] on [LEVEL0].[ID] = [LEVEL1].[PARENTMARKETINGPLANITEMID]
      where
        [LEVEL4].[ID] = @ID;
    end

    insert into @TEMPTABLE values (
      @ID,
      @NAME,
      @PLAN,
      @SITE
    );
    fetch next from MAILINGCURSOR into @ID, @NAME, @LEVEL, @SITE;
  end

  close MAILINGCURSOR;
  deallocate MAILINGCURSOR;

  select
    *
  from
    @TEMPTABLE
  order by
    [MAILING];

  return 0;