USP_COMMUNICATIONS_CREATEORUPDATESEGMENT

Creates or updates the underlying segment for a generic mailing.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT
@CURRENTAPPUSERID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@NAME nvarchar(100) IN
@SELECTIONS xml IN
@MAILTYPECODE tinyint IN
@DELIVERYMETHODCODE tinyint IN
@EXCLUDECONSTITSBASEDONPREFERENCE bit IN
@INCLUDECONSTITSWITHOUTPREFERENCE bit IN
@SEGMENTATIONID uniqueidentifier IN
@PACKAGEID uniqueidentifier IN
@ASKLADDERID uniqueidentifier IN
@ADDRESSPROCESSINGOPTIONID uniqueidentifier IN
@NAMEFORMATPARAMETERID uniqueidentifier IN
@MAILDATE datetime IN
@ESTIMATEDRESPONSERATE decimal(5, 2) IN
@ESTIMATEDAVERAGEGIFTAMOUNT money IN

Definition

Copy


CREATE procedure dbo.USP_COMMUNICATIONS_CREATEORUPDATESEGMENT
(
  @ID uniqueidentifier output,
  @CURRENTAPPUSERID uniqueidentifier = null,
  @CHANGEAGENTID uniqueidentifier = null,
  @NAME nvarchar(100),
  @SELECTIONS xml,
  @MAILTYPECODE tinyint,
  @DELIVERYMETHODCODE tinyint,
  @EXCLUDECONSTITSBASEDONPREFERENCE bit,
  @INCLUDECONSTITSWITHOUTPREFERENCE bit,
  @SEGMENTATIONID uniqueidentifier,
  @PACKAGEID as uniqueidentifier,
  @ASKLADDERID as uniqueidentifier,
  @ADDRESSPROCESSINGOPTIONID as uniqueidentifier,
  @NAMEFORMATPARAMETERID as uniqueidentifier,
  @MAILDATE as datetime,
  @ESTIMATEDRESPONSERATE decimal(5, 2) = 0,
  @ESTIMATEDAVERAGEGIFTAMOUNT money = 0
)
with execute as owner
as
begin
  --This procedure creates a segment and a view that unions the selections together. 

  -- Currently, Appeal Mailings are the only form of communication allowing multiple selections, but this is subject to change


  -- @MAILTYPECODE pertains to the MailTypeCode field in dbo.MAILPREFERENCE for constituent communication preferences

  --    0 - Revenue Acknowledgements

  --    1 - Appeals

  --    2 - Events

  --    3 - General Correspondence

  --    4 - Reminders

  --    5 - Receipts

  --    6 - Planned Gift Acknowledgements

  --    7 - Tribute Acknowledgements

  --    8 - Stewardship

  --    etc...  This code should not need to change as new types are introduced...


  -- DELIVERYMETHODCODE also pertains the corresponding field in dbo.MAILPREFERENCE

  --    0 - Mail

  --    1 - Email


  set nocount on;

  declare @CURRENTDATE datetime = getDate();

  if @CHANGEAGENTID is null
    exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

  begin try

    declare @SEGMENTTYPE nvarchar(20);

    if @DELIVERYMETHODCODE = 1
      set @SEGMENTTYPE = 'Email';
    else
      set @SEGMENTTYPE = 'Mail';

    declare @UPDATE bit = 1;
    if @ID is null or @ID = '00000000-0000-0000-0000-000000000000'
      begin
        set @ID = newId();
        set @UPDATE = 0;
      end

    declare @BBECRECORDSOURCEID uniqueidentifier;
    set @BBECRECORDSOURCEID = dbo.UFN_MKTRECORDSOURCE_GETFIRSTBBECRECORDSOURCEID();

    declare @MKTSEGMENTNAME nvarchar(100) = dbo.UFN_MKTSEGMENT_GETUNIQUENAME(@ID, @SEGMENTTYPE + ' Segment: ' + @NAME, null);
    declare @MKTSEGMENTDESCRIPTION nvarchar(255) = 'Auto generated ' + lower(@SEGMENTTYPE) + ' segment for mailing "' + @NAME + '".';

    if @UPDATE = 0
      -- Save the segment

      insert into dbo.MKTSEGMENT
      (
        ID,
        NAME,
        DESCRIPTION,
        SEGMENTTYPECODE,
        SEGMENTCATEGORYCODEID,
        CODE,
        QUERYVIEWCATALOGID,
        PARTDEFINITIONVALUESID,
        ISSYSTEM,
        ADDEDBYID,
        CHANGEDBYID,
        DATEADDED,
        DATECHANGED
      ) 
      values 
      (
        @ID,
        @MKTSEGMENTNAME,
        @MKTSEGMENTDESCRIPTION,
        1,
        null,
        '',
        @BBECRECORDSOURCEID,
        null,
        1,
        @CHANGEAGENTID,
        @CHANGEAGENTID,
        @CURRENTDATE,
        @CURRENTDATE
      );

    else
      update dbo.MKTSEGMENT
      set
        NAME = @MKTSEGMENTNAME,
        DESCRIPTION = @MKTSEGMENTDESCRIPTION,
        ISSYSTEM = 1,
        CHANGEDBYID = @CHANGEAGENTID,
        DATECHANGED = @CURRENTDATE
      where
        ID = @ID;

    if @UPDATE = 0
      -- Insert a parameter set for the refresh process for this segment

      insert into dbo.MKTSEGMENTREFRESHPROCESS
      (
        ID,
        SEGMENTID,
        ADDEDBYID,
        CHANGEDBYID,
        DATEADDED,
        DATECHANGED
      )
      values
      (
        newid(),
        @ID,
        @CHANGEAGENTID,
        @CHANGEAGENTID,
        @CURRENTDATE,
        @CURRENTDATE
      );

    -- Save all the selections

    if @UPDATE = 0
      exec dbo.USP_MKTSEGMENT_GETSELECTIONS_ADDFROMXML @ID, null, @SELECTIONS, @CHANGEAGENTID, @CURRENTDATE;
    else
      exec dbo.USP_MKTSEGMENT_GETSELECTIONS_UPDATEFROMXML @ID, null, @SELECTIONS, @CHANGEAGENTID, @CURRENTDATE;

    -- Create the VIEW and add it to the IDSETREGISTER

    declare @SEGSQL nvarchar(max);
    declare @VIEWSQL nvarchar(max);
    declare @SEGMENTVIEW nvarchar(60);
    declare @TABLECOUNT int;
    declare @BASETABLE nvarchar(255);
    declare @UNIONTABLE nvarchar(255);
    declare @SELECTIONNAME nvarchar(300);
    declare @SEGMENTNAME nvarchar(100);
    declare @SEGMENTDESCRIPTION nvarchar(255);
    declare @DATATYPE nvarchar(128);
    declare @SELECTIONID uniqueidentifier;
    declare @IDSETREGISTERID uniqueidentifier;
    declare @RECORDTYPEID uniqueidentifier;
    declare @RETVAL int;

    set @TABLECOUNT = 1;
    set @BASETABLE = null;

    -- Get the segment information

    select
      @SEGMENTVIEW = dbo.UFN_MKTSEGMENT_MAKEVIEWNAME(MKTSEGMENT.ID),
      @SEGMENTNAME = MKTSEGMENT.NAME + ' (' + @SEGMENTTYPE + ' Segment)',
      @SEGMENTDESCRIPTION = MKTSEGMENT.DESCRIPTION,
      @DATATYPE = QUERYVIEWCATALOG.PRIMARYKEYTYPENAME,
      @RECORDTYPEID = QUERYVIEWCATALOG.RECORDTYPEID
    from dbo.MKTSEGMENT
    inner join dbo.QUERYVIEWCATALOG 
      on QUERYVIEWCATALOG.ID = MKTSEGMENT.QUERYVIEWCATALOGID
    where MKTSEGMENT.ID = @ID;

    -- Segment selections

    declare SEGMENTCURSOR cursor local fast_forward for
      select
        MKTSEGMENTSELECTION.SELECTIONID
      from dbo.MKTSEGMENTSELECTION
      inner join dbo.IDSETREGISTER on MKTSEGMENTSELECTION.SELECTIONID = IDSETREGISTER.ID
      where MKTSEGMENTSELECTION.SEGMENTID = @ID;

    open SEGMENTCURSOR;
    fetch next from SEGMENTCURSOR into @SELECTIONID;

    while (@@FETCH_STATUS = 0)
    begin
      --Remove the CR and LF characters since we are inserting this name into a dash-dash (--) comment in the SQL we are building...

      select
        @SELECTIONNAME = replace(replace(NAME, char(13), ''), char(10), '')
      from dbo.IDSETREGISTER
      where ID = @SELECTIONID;

      if @BASETABLE is null
      begin
        set @BASETABLE = 'T' + convert(nvarchar(10), @TABLECOUNT) + '';
        set @SEGSQL = 'select '+ @BASETABLE +'.ID from dbo.' + dbo.UFN_MKTSELECTION_GETFUNCTIONNAME(@SELECTIONID) + ' as ' + @BASETABLE + '  --' + @SELECTIONNAME + char(13);

      end 
      else
      begin
        set @UNIONTABLE = 'T' + convert(nvarchar(10), @TABLECOUNT) + '';
        set @SEGSQL = isnull(@SEGSQL,'') + 'union select '+ @UNIONTABLE +'.ID from dbo.' + dbo.UFN_MKTSELECTION_GETFUNCTIONNAME(@SELECTIONID) + ' as ' + @UNIONTABLE + ' --' + @SELECTIONNAME + char(13);

      end

      set @TABLECOUNT = @TABLECOUNT + 1;
      fetch next from SEGMENTCURSOR into @SELECTIONID;
    end;

    close SEGMENTCURSOR;
    deallocate SEGMENTCURSOR;

    -- Create or alter the segment view

    declare @OBJID int;
    select @OBJID = object_id(@SEGMENTVIEW, N'V');
    if @OBJID is null
      set @VIEWSQL = 'create';
    else
      set @VIEWSQL = 'alter';

    set @VIEWSQL = @VIEWSQL + ' view dbo.' + @SEGMENTVIEW + '' + char(13) +
      'as' + char(13);


    if @BASETABLE is null
        set @VIEWSQL = @VIEWSQL + 'select top(0) cast(null as ' + @DATATYPE + ') as ID';
    else 
      begin
        set @SEGSQL = 'with [SELECTIONUNION] as (' + char(13
              + @SEGSQL 
              + ')' + char(13)

        if @MAILTYPECODE = 2
          begin
            set @SEGSQL = @SEGSQL
              + ',[PARAMETERSET] as (' + char(13)
              + '  select ' + char(13)
              + '    [EVENT].[EVENTCATEGORYCODEID] [ID]' + char(13)
              + '  from dbo.[INVITATION]' + char(13)
              + '  inner join dbo.[EVENT]' + char(13)
              + '    on [INVITATION].[EVENTID] = [EVENT].[ID]' + char(13)
              + '  where [INVITATION].[ID] = ''' + cast(@SEGMENTATIONID as nvarchar(36)) +  '''' + char(13)
              + '), ' + char(13)
              + '[MAILPREFERENCES] as (' + char(13)
              + '  select ' + char(13)
              + '    [MAILPREFERENCE].[CONSTITUENTID], ' + char(13)
              + '    [MAILPREFERENCE].[DELIVERYMETHODCODE], ' + char(13)
              + '    [MAILPREFERENCE].[SENDMAIL], ' + char(13)
              + '    [MAILPREFERENCE].[DONOTSENDOTHERCHANNEL], ' + char(13)
              + '    case ' + char(13)
              + '      when [MAILPREFERENCE].[EVENTCATEGORYCODEID] is not null and [MAILPREFERENCE].[EVENTCATEGORYCODEID] = (select [ID] from [PARAMETERSET]) then 1' + char(13)
              + '      when [MAILPREFERENCE].[EVENTCATEGORYCODEID] is null then 0 ' + char(13)
              + '      else -1 ' + char(13)
              + '    end [MATCHSCORE], ' + char(13)
              + '    [MAILPREFERENCE].[ID], ' + char(13)
              + '    [MAILPREFERENCE].[SITEID]' + char(13)
              + '  from dbo.[MAILPREFERENCE] ' + char(13)
              + '  inner join [SELECTIONUNION] on [MAILPREFERENCE].[CONSTITUENTID] = [SELECTIONUNION].[ID]' + char(13)
              + '  where [MAILPREFERENCE].[MAILTYPECODE] = ' + cast(@MAILTYPECODE as nvarchar) + char(13)
              + '  and ([MAILPREFERENCE].[EVENTCATEGORYCODEID] is null or [MAILPREFERENCE].[EVENTCATEGORYCODEID] in (select [ID] from [PARAMETERSET]))' + char(13)
              + '),' + char(13)
              + '[BESTMATCHMAILPREFERENCE] as (' + char(13)
              + '  select [MP].[CONSTITUENTID], [MP].[DELIVERYMETHODCODE], [MP].[SENDMAIL], [MP].[DONOTSENDOTHERCHANNEL], [MP].[MATCHSCORE], [MP].[ID], [MP].[SITEID] ' + char(13)
              + '  from [MAILPREFERENCES] [MP] ' + char(13)
              + '  where [MP].[MATCHSCORE] = (' + char(13)
              + '    select ' + char(13)
              + '      max([MATCHSCORE]) ' + char(13)
              + '    from [MAILPREFERENCES] ' + char(13)
              + '    where [MAILPREFERENCES].[CONSTITUENTID] = [MP].[CONSTITUENTID] ' + char(13)
              + '    group by [CONSTITUENTID] ' + char(13)
              + '  )' + char(13)
              + '), ' + char(13) +
              + '[EVENTSITEIDS] as (' + char(13)
              + '  select [E].[SITEID] from dbo.[EVENTSITE] [E]' + char(13)
              + '  inner join dbo.[INVITATION] [I] on [E].[EVENTID] = [I].[EVENTID]' + char(13)
              + '  where [I].[ID] = ''' + cast(@SEGMENTATIONID as nvarchar(36)) +  '''' + char(13)
              + ')' + char(13);
          end

        set @SEGSQL = @SEGSQL 
              + 'select distinct [SELECTIONUNION].[ID] ' + char(13)
              + 'from [SELECTIONUNION] ' + char(13);

        if @MAILTYPECODE = 2
            set @SEGSQL = @SEGSQL
              + ' left outer join [BESTMATCHMAILPREFERENCE] [MAILPREFERENCE] ' + char(13)
              + '   on [SELECTIONUNION].[ID] = [MAILPREFERENCE].[CONSTITUENTID] ' + char(13);
        else
            set @SEGSQL = @SEGSQL
              + 'left join dbo.[MAILPREFERENCE] ' + char(13)
              + '  on [SELECTIONUNION].[ID] = [MAILPREFERENCE].[CONSTITUENTID] ' + char(13)
              + '  and [MAILPREFERENCE].[MAILTYPECODE] = ' + cast(@MAILTYPECODE as nvarchar) + char(13);


        set @SEGSQL = @SEGSQL
          + 'where ' + char(13);

        -- Build the where clause to filter constits based on mail preferences

        if @INCLUDECONSTITSWITHOUTPREFERENCE = 1
      begin

        if @DELIVERYMETHODCODE = 1    -- Email

          begin
            set @SEGSQL = @SEGSQL 
                + '  ([MAILPREFERENCE].[ID] is null and exists (' + char(13)
                + '    select ID ' + char(13)
                + '    from dbo.EMAILADDRESS ' + char(13)
                + '    where CONSTITUENTID = [SELECTIONUNION].[ID] ' + char(13)
                + '    and DONOTEMAIL = 0 ' + char(13)
                + '    and (STARTDATE is null or STARTDATE <= ''' + cast(@MAILDATE as nvarchar) + ''') ' + char(13)
                + '    and (ENDDATE is null or ENDDATE >= ''' + cast(@MAILDATE as nvarchar) + ''') ' + char(13)
                + '    ) ' + char(13)
                + '  ) ' + char(13)
                + '  or (' + char(13);

          end

        else
          set @SEGSQL = @SEGSQL + 
            '  [MAILPREFERENCE].[ID] is null or (' + char(13);


        set @SEGSQL = @SEGSQL +
          '  [MAILPREFERENCE].[SENDMAIL] = 1 ' + char(13);

      end
    else
      set @SEGSQL = @SEGSQL +
          '  coalesce([MAILPREFERENCE].[SENDMAIL], 1) = 1 ' + char(13);

        if @EXCLUDECONSTITSBASEDONPREFERENCE = 1
          set @SEGSQL = @SEGSQL +
                '   and coalesce([MAILPREFERENCE].[DELIVERYMETHODCODE], ' + cast(@DELIVERYMETHODCODE as nvarchar) + ') = ' + cast(@DELIVERYMETHODCODE as nvarchar) + char(13);
        else
          -- Single channel

          -- Mail or Email only

          --  Include constits with no pref, that prefer this channel, 

          --    or that prefer another channel but are ok with receiving communications on other channels

          set @SEGSQL = @SEGSQL 
              + '    and (' + char(13)
              + '      coalesce([MAILPREFERENCE].[DELIVERYMETHODCODE], ' + cast(@DELIVERYMETHODCODE as nvarchar) + ')  = ' + cast(@DELIVERYMETHODCODE as nvarchar) + ' ' + char(13)
              + '      or ( ' + char(13)
              + '        coalesce([MAILPREFERENCE].[DELIVERYMETHODCODE], ' + cast(@DELIVERYMETHODCODE as nvarchar) + ')  <> ' + cast(@DELIVERYMETHODCODE as nvarchar) + ' ' + char(13)
              + '        and coalesce([MAILPREFERENCE].[DONOTSENDOTHERCHANNEL], 0) = 0 ' + char(13)
              + '      ) ' + char(13)
              + '    ) ' + char(13);

        if @INCLUDECONSTITSWITHOUTPREFERENCE = 1
          set @SEGSQL = @SEGSQL + ')' + char(13)

        if @MAILTYPECODE = 2
          set @SEGSQL = @SEGSQL
              + '    and (([SITEID] is null) or ([SITEID] in (select [SITEID] from [EVENTSITEIDS])))' + char(13);

        set @VIEWSQL = @VIEWSQL + @SEGSQL;
      end

    exec (@VIEWSQL);

    -- Grant rights for new views

    if @OBJID is null
      exec ('grant select on dbo.' + @SEGMENTVIEW + ' to BBAPPFXSERVICEROLE');

    -- Add to the ID Set Register

    -- Get the view row count

    declare @COUNTSQL nvarchar(max);
    declare @PARAMETERS nvarchar(max);
    declare @NUMROWS int;
    set @COUNTSQL = 'select @NUMROWS = count(1) from dbo.' + @SEGMENTVIEW + '';
    set @PARAMETERS = N'@NUMROWS int OUTPUT' 
    exec sp_executeSQL @COUNTSQL, @PARAMETERS, @NUMROWS OUTPUT;

    -- Get the ID set ID if this is an edit operation, else it will be null.  Also get the segment record type.

    select distinct
      @IDSETREGISTERID = MKTSEGMENT.IDSETREGISTERID,
      @RECORDTYPEID = isnull(IDSETREGISTER.RECORDTYPEID, @RECORDTYPEID)
    from dbo.MKTSEGMENT
    left join dbo.MKTSEGMENTSELECTION 
      on MKTSEGMENTSELECTION.SEGMENTID = MKTSEGMENT.ID
    left join dbo.IDSETREGISTER 
      on MKTSEGMENTSELECTION.SELECTIONID = IDSETREGISTER.ID
    where MKTSEGMENT.ID = @ID;

    -- Create the ID set...

    exec dbo.USP_IDSETREGISTER_CREATEORUPDATE 
      @IDSETREGISTERID output,
      @SEGMENTNAME,
      @SEGMENTDESCRIPTION,
      @SEGMENTVIEW,
      0,
      @RECORDTYPEID,
      0,
      1,
      @NUMROWS,
      @CHANGEAGENTID;

    -- Mark IDSET as inactive to filter from searches

    -- Make sure the RECORDTYPEID gets set.  The SP doesn't update it on an UPDATE.

    update dbo.IDSETREGISTER set
      RECORDTYPEID = @RECORDTYPEID,
      ACTIVE = 0,
      ISSYSTEM = 1,
      CHANGEDBYID = @CHANGEAGENTID,
      DATECHANGED = @CURRENTDATE
    where ID = @IDSETREGISTERID;

    -- Save the ID set ID on the segment table...

    update dbo.MKTSEGMENT set
      IDSETREGISTERID = @IDSETREGISTERID,
      CHANGEDBYID = @CHANGEAGENTID,
      DATECHANGED = @CURRENTDATE 
    where ID = @ID;

    -- Create or update the segmentation segment

    declare @MKTSEGMENTATIONSEGMENTID uniqueidentifier;
    declare @SEQUENCE integer;

    select 
      @MKTSEGMENTATIONSEGMENTID = ID
    from dbo.MKTSEGMENTATIONSEGMENT
    where SEGMENTID = @ID;

    set @SEQUENCE = (case when @INCLUDECONSTITSWITHOUTPREFERENCE = 0 then 2 else 1 end);

    if @MKTSEGMENTATIONSEGMENTID is null
      exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTATIONSEGMENT] 
        @MKTSEGMENTATIONSEGMENTID output,
        @CHANGEAGENTID,
        @SEGMENTATIONID,                --@SEGMENTATIONIDMARKETINGPLANBRIEFIDSEQUENCE

        null,                           --@MARKETINGPLANBRIEFID

        @ID,                            --@SEGMENTID

        '',                             --@CODE

        '',                             --@TESTSEGMENTCODE

        @PACKAGEID,                     --@PACKAGEID

        '',                             --@PACKAGECODE

        @ESTIMATEDRESPONSERATE,         --@RESPONSERATE

        @ESTIMATEDAVERAGEGIFTAMOUNT,    --@GIFTAMOUNT

        100,                            --@SAMPLESIZE

        0,                              --@SAMPLESIZETYPECODE

        0,                              --@SAMPLESIZEMETHODCODE

        @SEQUENCE,
        @ASKLADDERID,                   --@MKTASKLADDERID

        1,                              --@SAMPLESIZEEXCLUDEREMAINDER

        0,                              --@OVERRIDEADDRESSPROCESSING

        1,                              --@USEADDRESSPROCESSING

        @ADDRESSPROCESSINGOPTIONID,
        1,                              --@ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE

        @MAILDATE,                      --@ADDRESSPROCESSINGOPTIONSEASONALASOFDATE

        @NAMEFORMATPARAMETERID,
        null,                           --@CODEVALUEID

        null,                           --@TESTSEGMENTCODEVALUEID

        null,                           --@PACKAGECODEVALUEID

        null,                           --@ITEMLIST

        '',                             --@CHANNELSOURCECODE

        null;                           --@CHANNELSOURCECODEVALUEID


    else
    begin
      exec dbo.[USP_DATAFORMTEMPLATE_EDIT_MKTSEGMENTATIONSEGMENT_6]
        @MKTSEGMENTATIONSEGMENTID,
        @CHANGEAGENTID,
        @ID,                            --@SEGMENTID

        '',                             --@CODE

        '',                             --@TESTSEGMENTCODE

        @PACKAGEID,                     --@PACKAGEID

        '',                             --@PACKAGECODE

        @ESTIMATEDRESPONSERATE,         --@RESPONSERATE

        @ESTIMATEDAVERAGEGIFTAMOUNT,    --@GIFTAMOUNT

        100,                            --@SAMPLESIZE

        0,                              --@SAMPLESIZETYPECODE

        0,                              --@SAMPLESIZEMETHODCODE

        1,                              --@SAMPLESIZEEXCLUDEREMAINDER

        @ASKLADDERID,                   --@MKTASKLADDERID

        0,                              --@OVERRIDEADDRESSPROCESSING

        1,                              --@USEADDRESSPROCESSING

        @ADDRESSPROCESSINGOPTIONID
        1,                              --@ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE

        @MAILDATE,                      --@ADDRESSPROCESSINGOPTIONSEASONALASOFDATE

        @NAMEFORMATPARAMETERID,
        null,                           --@CODEVALUEID

        null,                           --@PACKAGECODEVALUEID

        null,                           --@TESTSEGMENTCODEVALUEID

        null,                           --@ITEMLIST

        '',                             --@CHANNELSOURCECODE

        null,                           --@CHANNELSOURCECODEVALUEID

        0,                              --@EXCLUDESPOUSE

        0,                              --@OVERRIDEBUSINESSUNITS

        null;                     --@BUSINESSUNITS


      -- update the sequence field

      update dbo.MKTSEGMENTATIONSEGMENT set
        SEQUENCE = @SEQUENCE,
        CHANGEDBYID = @CHANGEAGENTID,
        DATECHANGED = @CURRENTDATE
      where ID = @MKTSEGMENTATIONSEGMENTID;

    end

  end try

  begin catch
    exec dbo.USP_RAISE_ERROR;
    set @RETVAL = 1;
  end catch

  return isnull(@RETVAL, 0);
end