UFN_MKTSEGMENTLIST_DUPLICATEFIELDSEXIST

Determines if the list segment contains the fields matching the defined duplicate field criteria for the record source.

Return

Return Type
tinyint

Parameters

Parameter Parameter Type Mode Description
@SEGMENTLISTID uniqueidentifier IN

Definition

Copy


create function dbo.[UFN_MKTSEGMENTLIST_DUPLICATEFIELDSEXIST]
(
  @SEGMENTLISTID uniqueidentifier
)
returns tinyint
as
begin
  declare @RESULT tinyint;
  declare @RECORDSOURCEID uniqueidentifier;
  declare @LAYOUTID uniqueidentifier;
  declare @DUPLICATEID uniqueidentifier;
  declare @DEDUPLISTS bit;

  set @RESULT = 2;   /* 0=False, 1=True, 2=No duplicate fields defined, 3=Skip dedup */

  select
    @RECORDSOURCEID = [MKTLIST].[RECORDSOURCEID],
    @LAYOUTID = [MKTSEGMENTLIST].[LISTLAYOUTID]
  from dbo.[MKTSEGMENTLIST]
  inner join dbo.[MKTLIST] on [MKTLIST].[ID] = [MKTSEGMENTLIST].[LISTID]
  where [MKTSEGMENTLIST].[ID] = @SEGMENTLISTID;

  select
    @DUPLICATEID = [ID],
    @DEDUPLISTS = [DEDUPLISTS]
  from dbo.[MKTDUPLICATE]
  where [QUERYVIEWCATALOGID] = @RECORDSOURCEID;

  if @DEDUPLISTS = 1
    --Compare the duplicate fields against those in the layout.  All duplicate fields

    --must exist in the layout, otherwise we cannot process duplicates.

    set @RESULT = (case when exists(
                     select 1
                     from dbo.[MKTDUPLICATEFIELD]
                     left join dbo.[MKTLISTLAYOUTFIELD]
                        on upper([MKTLISTLAYOUTFIELD].[FIELDNAME]) = upper([MKTDUPLICATEFIELD].[FIELDNAME])
                        and [MKTLISTLAYOUTFIELD].[LISTLAYOUTID] = @LAYOUTID
                        and [MKTLISTLAYOUTFIELD].[MAPPINGCODE] = 1
                        and exists(select 1 from [INFORMATION_SCHEMA].[COLUMNS] where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = 'MKTSEGMENTLISTDATA' and upper([COLUMN_NAME]) = upper([MKTLISTLAYOUTFIELD].[FIELDNAME]))
                     where [MKTDUPLICATEFIELD].[DUPLICATEID] = @DUPLICATEID
                     and [MKTLISTLAYOUTFIELD].[ID] is null)
                   then 0 else 1 end);
  else
    set @RESULT = 3;

  return @RESULT;
end