USP_MAILING_GETNAMEFORMATS
Returns constituents with name format processing rules applied.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@NAMEFORMATPARAMETERID | uniqueidentifier | IN | |
@CONSTITUENTIDSETTABLENAME | nvarchar(128) | IN | |
@CONSTITUENTIDSETJOINCOLUMNNAME | nvarchar(128) | IN | |
@CONSTITUENTIDSETCONTACTCOLUMNNAME | nvarchar(128) | IN | |
@CONSTITUENTIDSETGROUPCONTACTCOLUMNNAME | nvarchar(128) | IN | |
@CONSTITUENTIDSETEXCLUDESPOUSECOLUMNNAME | nvarchar(128) | IN |
Definition
Copy
CREATE procedure dbo.[USP_MAILING_GETNAMEFORMATS]
(
@NAMEFORMATPARAMETERID uniqueidentifier,
@CONSTITUENTIDSETTABLENAME nvarchar(128), --Table or view that contains constituent IDs
@CONSTITUENTIDSETJOINCOLUMNNAME nvarchar(128), --Column to use when joining to the table or view
@CONSTITUENTIDSETCONTACTCOLUMNNAME nvarchar(128) = '', --Column to use when you have contacts
@CONSTITUENTIDSETGROUPCONTACTCOLUMNNAME nvarchar(128) = '', --Column to use when you have group contacts
@CONSTITUENTIDSETEXCLUDESPOUSECOLUMNNAME nvarchar(128) = '' --Column to use with exclude spouse options
)
as
set nocount on;
--Returns results in the following temp table named #TEMP_MAILING_NAMEFORMATS. This temp table must exist
--outside of this stored procedure. Use the statement below to create the temp table before calling this stored
--procedure. The temp table will be indexed on the CONSTITUENTID column.
--
--create table #TEMP_MAILING_NAMEFORMATS (
-- [CONSTITUENTID] uniqueidentifier not null,
-- [MAILTOCONSTITUENTID] uniqueidentifier not null,
-- [ADDRESSEE] nvarchar(700) collate database_default,
-- [SALUTATION] nvarchar(700) collate database_default,
-- [CONTACT] nvarchar(700) collate database_default
--);
declare @ADDRESSEEFUNCTIONID uniqueidentifier;
declare @ADDRESSEEFUNCTIONISJOINT bit;
declare @SALUTATIONFUNCTIONID uniqueidentifier;
declare @SALUTATIONFUNCTIONISJOINT bit;
declare @CONTACTADDRESSEEFUNCTIONID uniqueidentifier;
declare @CONTACTADDRESSEEFUNCTIONISJOINT bit;
declare @ORGSALUTATIONCODE tinyint;
declare @CONTACTSALUTATIONFUNCTIONID uniqueidentifier;
declare @CONTACTSALUTATIONFUNCTIONISJOINT bit;
declare @CONTACTSALUTATIONOPTIONCODE tinyint;
declare @CUSTOMNAME nvarchar(100);
declare @GROUPADDRESSEEFUNCTIONID uniqueidentifier;
declare @GROUPADDRESSEEFUNCTIONISJOINT bit;
declare @GROUPSALUTATIONCODE tinyint;
declare @GROUPSALUTATIONFUNCTIONID uniqueidentifier;
declare @GROUPSALUTATIONFUNCTIONISJOINT bit;
declare @GROUPNOCONTACTOPTIONCODE bit;
declare @GROUPNOCONTACTCUSTOMNAME nvarchar(100);
declare @JOINTRULETYPECODE As tinyint;
declare @JOINTSELECTIONID As uniqueidentifier;
declare @JOINTSELECTIONBOTHRULETYPECODE As tinyint;
declare @JOINTSELECTIONNEITHERRULETYPECODE As tinyint;
declare @OBJID int;
declare @ISTEMPTABLE bit;
declare @SQL nvarchar(max);
--Debug only
--declare @STARTDATE datetime;
--declare @STATUS nvarchar(100);
begin try
--Validate the required results temp table exists and that it does not have indexes defined on it...
set @OBJID = object_id('tempdb..#TEMP_MAILING_NAMEFORMATS');
if @OBJID is null
raiserror('The temp table #TEMP_MAILING_NAMEFORMATS is required to hold the results of this stored procedure but it does not exist. Please create the temp table before calling this stored procedure.', 13, 1);
if exists(select * from tempdb.sys.indexes where object_id = @OBJID and type = 2) --only concerned with nonclustered indexes
raiserror('The temp table #TEMP_MAILING_NAMEFORMATS already has indexes defined on it. Please remove these indexes before calling this stored procedure.', 13, 1);
if not exists(select * from tempdb.sys.columns c where c.[object_id] = @OBJID and c.[name] = 'MAILTOCONSTITUENTID' and c.[system_type_id] = (select t.[system_type_id] from tempdb.sys.types t where t.[name] = 'uniqueidentifier'))
raiserror('The temp table #TEMP_MAILING_NAMEFORMATS is missing the new required column named MAILTOCONSTITUENTID of type uniqueidentifier. Please add the column to your create table statement.', 13, 1);
--Validate that none of the temp tables used in this stored procedure exist already...
if object_id('tempdb..#TEMPCONSTITUENT') is not null
raiserror('The temp table #TEMPCONSTITUENT is used by this stored procedure but it already exists in this session. Please make sure the temp table does not exist before calling this stored procedure.', 13, 1);
if object_id('tempdb..#TEMPNAMEFORMAT') is not null
raiserror('The temp table #TEMPNAMEFORMAT is used by this stored procedure but it already exists in this session. Please make sure the temp table does not exist before calling this stored procedure.', 13, 1);
--Validate the constituent IDSet table exists and is defined appropriately...
if len(@CONSTITUENTIDSETTABLENAME) = 0 or len(@CONSTITUENTIDSETJOINCOLUMNNAME) = 0
raiserror('The parameters @CONSTITUENTIDSETTABLENAME and @CONSTITUENTIDSETJOINCOLUMNNAME are required to execute this stored procedure.', 13, 1);
set @ISTEMPTABLE = (case when left(@CONSTITUENTIDSETTABLENAME, 1) = '#' then 1 else 0 end);
set @OBJID = object_id((case when @ISTEMPTABLE = 1 then 'tempdb..' else 'dbo.' end) + '[' + @CONSTITUENTIDSETTABLENAME + ']');
if @OBJID is null
raiserror('The constituent IDSet table specified in the @CONSTITUENTIDSETTABLENAME parameter does not exist.', 13, 1);
if (@ISTEMPTABLE = 1 and not exists(select * from tempdb.sys.columns c where c.[object_id] = @OBJID and c.[name] = @CONSTITUENTIDSETJOINCOLUMNNAME and c.[system_type_id] = (select t.[system_type_id] from tempdb.sys.types t where t.[name] = 'uniqueidentifier'))) or
(@ISTEMPTABLE = 0 and not exists(select * from sys.columns c where c.[object_id] = @OBJID and c.[name] = @CONSTITUENTIDSETJOINCOLUMNNAME and c.[system_type_id] = (select t.[system_type_id] from sys.types t where t.[name] = 'uniqueidentifier')))
raiserror('The constituent IDSet column specified in the @CONSTITUENTIDSETJOINCOLUMNNAME parameter does not exist or is not defined properly as a uniqueidentifier.', 13, 1);
if len(@CONSTITUENTIDSETCONTACTCOLUMNNAME) > 0 and
((@ISTEMPTABLE = 1 and not exists(select * from tempdb.sys.columns c where c.[object_id] = @OBJID and c.[name] = @CONSTITUENTIDSETCONTACTCOLUMNNAME and c.[system_type_id] = (select t.[system_type_id] from tempdb.sys.types t where t.[name] = 'uniqueidentifier'))) or
(@ISTEMPTABLE = 0 and not exists(select * from sys.columns c where c.[object_id] = @OBJID and c.[name] = @CONSTITUENTIDSETCONTACTCOLUMNNAME and c.[system_type_id] = (select t.[system_type_id] from sys.types t where t.[name] = 'uniqueidentifier'))))
raiserror('The constituent IDSet column specified in the @CONSTITUENTIDSETCONTACTCOLUMNNAME parameter does not exist or is not defined properly as a uniqueidentifier.', 13, 1);
if len(@CONSTITUENTIDSETGROUPCONTACTCOLUMNNAME) > 0 and
((@ISTEMPTABLE = 1 and not exists(select * from tempdb.sys.columns c where c.[object_id] = @OBJID and c.[name] = @CONSTITUENTIDSETGROUPCONTACTCOLUMNNAME and c.[system_type_id] = (select t.[system_type_id] from tempdb.sys.types t where t.[name] = 'uniqueidentifier'))) or
(@ISTEMPTABLE = 0 and not exists(select * from sys.columns c where c.[object_id] = @OBJID and c.[name] = @CONSTITUENTIDSETGROUPCONTACTCOLUMNNAME and c.[system_type_id] = (select t.[system_type_id] from sys.types t where t.[name] = 'uniqueidentifier'))))
raiserror('The constituent IDSet column specified in the @CONSTITUENTIDSETGROUPCONTACTCOLUMNNAME parameter does not exist or is not defined properly as a uniqueidentifier.', 13, 1);
if len(@CONSTITUENTIDSETEXCLUDESPOUSECOLUMNNAME) > 0 and
((@ISTEMPTABLE = 1 and not exists(select * from tempdb.sys.columns c where c.[object_id] = @OBJID and c.[name] = @CONSTITUENTIDSETEXCLUDESPOUSECOLUMNNAME and c.[system_type_id] = (select t.[system_type_id] from tempdb.sys.types t where t.[name] = 'bit'))) or
(@ISTEMPTABLE = 0 and not exists(select * from sys.columns c where c.[object_id] = @OBJID and c.[name] = @CONSTITUENTIDSETEXCLUDESPOUSECOLUMNNAME and c.[system_type_id] = (select t.[system_type_id] from sys.types t where t.[name] = 'bit'))))
raiserror('The constituent IDSet column specified in the @CONSTITUENTIDSETEXCLUDESPOUSECOLUMNNAME parameter does not exist or is not defined properly as a bit.', 13, 1);
--Get the name format options...
select
@ADDRESSEEFUNCTIONID = [ADDRESSEEFUNCTIONID],
@ADDRESSEEFUNCTIONISJOINT = dbo.[UFN_NAMEFORMATFUNCTION_ISJOINT]([ADDRESSEEFUNCTIONID]),
@SALUTATIONFUNCTIONID = [SALUTATIONFUNCTIONID],
@SALUTATIONFUNCTIONISJOINT = dbo.[UFN_NAMEFORMATFUNCTION_ISJOINT]([SALUTATIONFUNCTIONID]),
@CONTACTADDRESSEEFUNCTIONID = [CONTACTADDRESSEEFUNCTIONID],
@CONTACTADDRESSEEFUNCTIONISJOINT = dbo.[UFN_NAMEFORMATFUNCTION_ISJOINT]([CONTACTADDRESSEEFUNCTIONID]),
@ORGSALUTATIONCODE = [ORGSALUTATIONCODE],
@CONTACTSALUTATIONFUNCTIONID = [CONTACTSALUTATIONFUNCTIONID],
@CONTACTSALUTATIONFUNCTIONISJOINT = dbo.[UFN_NAMEFORMATFUNCTION_ISJOINT]([CONTACTSALUTATIONFUNCTIONID]),
@CONTACTSALUTATIONOPTIONCODE = [CONTACTSALUTATIONOPTIONCODE],
@CUSTOMNAME = [CUSTOMNAME],
@GROUPADDRESSEEFUNCTIONID = [GROUPADDRESSEEFUNCTIONID],
@GROUPADDRESSEEFUNCTIONISJOINT = dbo.[UFN_NAMEFORMATFUNCTION_ISJOINT]([GROUPADDRESSEEFUNCTIONID]),
@GROUPSALUTATIONCODE = [GROUPSALUTATIONCODE],
@GROUPSALUTATIONFUNCTIONID = [GROUPSALUTATIONFUNCTIONID],
@GROUPSALUTATIONFUNCTIONISJOINT = dbo.[UFN_NAMEFORMATFUNCTION_ISJOINT]([GROUPSALUTATIONFUNCTIONID]),
@GROUPNOCONTACTOPTIONCODE = [GROUPNOCONTACTOPTIONCODE],
@GROUPNOCONTACTCUSTOMNAME = [GROUPNOCONTACTCUSTOMNAME],
@JOINTRULETYPECODE = [JOINTRULETYPECODE],
@JOINTSELECTIONID = [JOINTSELECTIONID],
@JOINTSELECTIONBOTHRULETYPECODE = [JOINTSELECTIONBOTHRULETYPECODE],
@JOINTSELECTIONNEITHERRULETYPECODE = [JOINTSELECTIONNEITHERRULETYPECODE]
from dbo.[NAMEFORMATPARAMETER]
where [ID] = @NAMEFORMATPARAMETERID;
/****************************************************/
/* Constituents */
/****************************************************/
--Debug only
--raiserror('Constituents...', 0, 1) with nowait;
--set @STARTDATE = getdate();
create table #TEMPCONSTITUENT (
[CONSTITUENTID] uniqueidentifier not null,
[CONTACTID] uniqueidentifier,
[GROUPCONTACTID] uniqueidentifier,
[EXCLUDESPOUSE] bit not null
);
--Insert the IDs into another temp table so we don't have make the huge statement below all dynamic sql.
--This should be really fast if we are just moving from one temp table to another.
set @SQL = 'insert into #TEMPCONSTITUENT ([CONSTITUENTID], [CONTACTID], [GROUPCONTACTID], [EXCLUDESPOUSE])' + char(13) +
' select' + char(13) +
' ' + quotename(@CONSTITUENTIDSETJOINCOLUMNNAME) + ',' + char(13) +
' ' + (case when len(@CONSTITUENTIDSETCONTACTCOLUMNNAME) > 0 then quotename(@CONSTITUENTIDSETCONTACTCOLUMNNAME) else 'null' end) + ',' + char(13) +
' ' + (case when len(@CONSTITUENTIDSETGROUPCONTACTCOLUMNNAME) > 0 then quotename(@CONSTITUENTIDSETGROUPCONTACTCOLUMNNAME) else 'null' end) + ',' + char(13) +
' ' + (case when len(@CONSTITUENTIDSETEXCLUDESPOUSECOLUMNNAME) > 0 then 'isnull(' + quotename(@CONSTITUENTIDSETEXCLUDESPOUSECOLUMNNAME) + ', 0)' else '0' end) + char(13) +
' from dbo.' + quotename(@CONSTITUENTIDSETTABLENAME);
exec (@SQL);
create nonclustered index [IX_TEMPCONSTITUENT_CONSTITUENTID] on #TEMPCONSTITUENT ([CONSTITUENTID]) include ([CONTACTID], [GROUPCONTACTID], [EXCLUDESPOUSE]);
--Debug only
--set @STATUS = 'Constituents... ' + cast((select count(*) from #TEMPCONSTITUENT) as nvarchar(10)) + ' rows... ' + cast(datediff(s, @STARTDATE, getdate()) as nvarchar(10)) + ' seconds';
--raiserror(@STATUS, 0, 1) with nowait;
/****************************************************/
/* Name formats */
/****************************************************/
--Debug only
--raiserror('Name formats...', 0, 1) with nowait;
--set @STARTDATE = getdate();
declare @TEMP_INDIVIDUALADDRESSEES table([SEQUENCE] int primary key, [ISPRIMARY] bit, [NAMEFORMATTYPECODEID] uniqueidentifier);
declare @TEMP_INDIVIDUALSALUTATIONS table([SEQUENCE] int primary key, [ISPRIMARY] bit, [NAMEFORMATTYPECODEID] uniqueidentifier);
declare @TEMP_ORGADDRESSEES table([SEQUENCE] int primary key, [ISPRIMARY] bit, [NAMEFORMATTYPECODEID] uniqueidentifier);
declare @TEMP_ORGSALUTATIONS table([SEQUENCE] int primary key, [ISPRIMARY] bit, [NAMEFORMATTYPECODEID] uniqueidentifier);
declare @TEMP_GROUPADDRESSEES table([SEQUENCE] int primary key, [ISPRIMARY] bit, [NAMEFORMATTYPECODEID] uniqueidentifier);
declare @TEMP_GROUPSALUTATIONS table([SEQUENCE] int primary key, [ISPRIMARY] bit, [NAMEFORMATTYPECODEID] uniqueidentifier);
insert into @TEMP_INDIVIDUALADDRESSEES ([SEQUENCE], [ISPRIMARY], [NAMEFORMATTYPECODEID])
select [SEQUENCE], [ADDRESSEEFORMATISPRIMARY], [NAMEFORMATTYPECODEID]
from dbo.[UFN_NAMEFORMATPARAMETER_GETINDADDRESSEES](@NAMEFORMATPARAMETERID);
insert into @TEMP_INDIVIDUALSALUTATIONS ([SEQUENCE], [ISPRIMARY], [NAMEFORMATTYPECODEID])
select [SEQUENCE], [SALUTATIONFORMATISPRIMARY], [NAMEFORMATTYPECODEID]
from dbo.[UFN_NAMEFORMATPARAMETER_GETINDSALUTATIONS](@NAMEFORMATPARAMETERID);
insert into @TEMP_ORGADDRESSEES ([SEQUENCE], [ISPRIMARY], [NAMEFORMATTYPECODEID])
select [SEQUENCE], [ADDRESSEEFORMATISPRIMARY], [NAMEFORMATTYPECODEID]
from dbo.[UFN_NAMEFORMATPARAMETER_GETORGADDRESSEES](@NAMEFORMATPARAMETERID);
insert into @TEMP_ORGSALUTATIONS ([SEQUENCE], [ISPRIMARY], [NAMEFORMATTYPECODEID])
select [SEQUENCE], [SALUTATIONFORMATISPRIMARY], [NAMEFORMATTYPECODEID]
from dbo.[UFN_NAMEFORMATPARAMETER_GETORGSALUTATIONS](@NAMEFORMATPARAMETERID);
insert into @TEMP_GROUPADDRESSEES ([SEQUENCE], [ISPRIMARY], [NAMEFORMATTYPECODEID])
select [SEQUENCE], [ADDRESSEEFORMATISPRIMARY], [NAMEFORMATTYPECODEID]
from dbo.[UFN_NAMEFORMATPARAMETER_GETGRPADDRESSEES](@NAMEFORMATPARAMETERID);
insert into @TEMP_GROUPSALUTATIONS ([SEQUENCE], [ISPRIMARY], [NAMEFORMATTYPECODEID])
select [SEQUENCE], [SALUTATIONFORMATISPRIMARY], [NAMEFORMATTYPECODEID]
from dbo.[UFN_NAMEFORMATPARAMETER_GETGRPSALUTATIONS](@NAMEFORMATPARAMETERID);
--Create some local variables so we can try to limit the number of name formats we pull back...
declare @PRIMARYADDRESSEEEXISTS bit = (case when exists(select * from @TEMP_INDIVIDUALADDRESSEES where ISPRIMARY = 1) or exists(select * from @TEMP_ORGADDRESSEES where ISPRIMARY = 1) or exists(select * from @TEMP_GROUPADDRESSEES where ISPRIMARY = 1) then 1 else 0 end);
declare @PRIMARYSALUTATIONEXISTS bit = (case when exists(select * from @TEMP_INDIVIDUALSALUTATIONS where ISPRIMARY = 1) or exists(select * from @TEMP_ORGSALUTATIONS where ISPRIMARY = 1) or exists(select * from @TEMP_GROUPSALUTATIONS where ISPRIMARY = 1) then 1 else 0 end);
declare @NAMEFORMATTYPECODEIDS table ([ID] uniqueidentifier primary key);
insert into @NAMEFORMATTYPECODEIDS ([ID])
select NAMEFORMATTYPECODEID from @TEMP_INDIVIDUALADDRESSEES where ISPRIMARY = 0
union
select NAMEFORMATTYPECODEID from @TEMP_INDIVIDUALSALUTATIONS where ISPRIMARY = 0
union
select NAMEFORMATTYPECODEID from @TEMP_ORGADDRESSEES where ISPRIMARY = 0
union
select NAMEFORMATTYPECODEID from @TEMP_ORGSALUTATIONS where ISPRIMARY = 0
union
select NAMEFORMATTYPECODEID from @TEMP_GROUPADDRESSEES where ISPRIMARY = 0
union
select NAMEFORMATTYPECODEID from @TEMP_GROUPSALUTATIONS where ISPRIMARY = 0;
--Pull back all possible name formats for our constituents...
create table #TEMPNAMEFORMAT (
[CONSTITUENTID] uniqueidentifier not null,
[MAILTOCONSTITUENTID] uniqueidentifier not null,
[NAMEFORMATTYPECODEID] uniqueidentifier not null,
[CUSTOMNAME] nvarchar(700) collate database_default not null,
[NAMEFORMATFUNCTIONID] uniqueidentifier,
[PRIMARYADDRESSEE] bit not null,
[PRIMARYSALUTATION] bit not null
);
insert into #TEMPNAMEFORMAT ([CONSTITUENTID], [MAILTOCONSTITUENTID], [NAMEFORMATTYPECODEID], [CUSTOMNAME], [NAMEFORMATFUNCTIONID], [PRIMARYADDRESSEE], [PRIMARYSALUTATION])
select
C.CONSTITUENTID,
NAMEFORMAT.CONSTITUENTID as [MAILTOCONSTITUENTID],
NAMEFORMAT.NAMEFORMATTYPECODEID,
NAMEFORMAT.CUSTOMNAME,
NAMEFORMAT.NAMEFORMATFUNCTIONID,
NAMEFORMAT.PRIMARYADDRESSEE,
NAMEFORMAT.PRIMARYSALUTATION
from #TEMPCONSTITUENT C
inner join dbo.CONSTITUENT on CONSTITUENT.ID = coalesce(C.CONTACTID, C.GROUPCONTACTID, C.CONSTITUENTID)
left join dbo.GROUPMEMBER on CONSTITUENT.ISGROUP = 1 and GROUPMEMBER.GROUPID = CONSTITUENT.ID and GROUPMEMBER.ISPRIMARY = 1
inner join dbo.NAMEFORMAT on NAMEFORMAT.CONSTITUENTID = (case when CONSTITUENT.ISGROUP = 1 then GROUPMEMBER.MEMBERID else CONSTITUENT.ID end)
where (@PRIMARYADDRESSEEEXISTS = 1 and NAMEFORMAT.PRIMARYADDRESSEE = 1)
or (@PRIMARYSALUTATIONEXISTS = 1 and NAMEFORMAT.PRIMARYSALUTATION = 1)
or NAMEFORMAT.NAMEFORMATTYPECODEID in (select ID from @NAMEFORMATTYPECODEIDS);
create nonclustered index [IX_TEMPNAMEFORMAT_CONSTITUENTID_MAILTOCONSTITUENTID] on #TEMPNAMEFORMAT ([CONSTITUENTID], [MAILTOCONSTITUENTID])
include ([NAMEFORMATTYPECODEID], [CUSTOMNAME], [NAMEFORMATFUNCTIONID], [PRIMARYADDRESSEE], [PRIMARYSALUTATION]);
--Debug only
--set @STATUS = 'Name formats... ' + cast((select count(*) from #TEMPNAMEFORMAT) as nvarchar(10)) + ' rows... ' + cast(datediff(s, @STARTDATE, getdate()) as nvarchar(10)) + ' seconds';
--raiserror(@STATUS, 0, 1) with nowait;
/****************************************************/
/* Final results */
/****************************************************/
--Debug only
--raiserror('Final results...', 0, 1) with nowait;
--set @STARTDATE = getdate();
with CONSTIT_CTE as
(
select
C.CONSTITUENTID,
C.CONTACTID,
C.EXCLUDESPOUSE,
isnull(MEMBERCONSTIT.ID, GROUPMEMBER.MEMBERID) as [MEMBERID],
CONSTITUENT.ISORGANIZATION,
CONSTITUENT.ISGROUP,
CONSTITUENT.NAME,
CONSTITUENT.GENDERCODE,
CONSTITUENT.KEYNAME,
CONSTITUENT.FIRSTNAME,
CONSTITUENT.MIDDLENAME,
TITLECODE.[DESCRIPTION] as TITLE,
SUFFIXCODE.[DESCRIPTION] as SUFFIX,
CONSTITUENT.GENDERCODEID
from #TEMPCONSTITUENT as C
inner join dbo.CONSTITUENT on CONSTITUENT.ID = C.CONSTITUENTID
left join dbo.CONSTITUENT as MEMBERCONSTIT on MEMBERCONSTIT.ID = C.GROUPCONTACTID and MEMBERCONSTIT.ISGROUP = 0
left join dbo.GROUPMEMBER on CONSTITUENT.ISGROUP = 1 and GROUPMEMBER.GROUPID = CONSTITUENT.ID and GROUPMEMBER.ISPRIMARY = 1
left join dbo.TITLECODE on TITLECODE.ID = CONSTITUENT.TITLECODEID
left join dbo.SUFFIXCODE on SUFFIXCODE.ID = CONSTITUENT.SUFFIXCODEID
),
ADDRESSEE_CTE as
(
select
SUB.CONSTITUENTID,
SUB.MAILTOCONSTITUENTID,
SUB.CUSTOMNAME,
SUB.NAMEFORMATFUNCTIONID,
SUB.ISJOINTFUNCTION
from (
select
NF.CONSTITUENTID,
NF.MAILTOCONSTITUENTID,
NF.CUSTOMNAME,
NF.NAMEFORMATFUNCTIONID,
NAMEFORMATFUNCTION.ISJOINTFUNCTION,
row_number() over (partition by NF.CONSTITUENTID, NF.MAILTOCONSTITUENTID order by T.SEQUENCE) as SEQUENCE
from CONSTIT_CTE
inner join #TEMPNAMEFORMAT NF on NF.CONSTITUENTID = CONSTIT_CTE.CONSTITUENTID and NF.MAILTOCONSTITUENTID = (case when CONSTIT_CTE.ISORGANIZATION = 1 then CONSTIT_CTE.CONTACTID when CONSTIT_CTE.ISGROUP = 1 then CONSTIT_CTE.MEMBERID else CONSTIT_CTE.CONSTITUENTID end)
cross apply (
select T1.SEQUENCE from @TEMP_INDIVIDUALADDRESSEES T1 where CONSTIT_CTE.ISORGANIZATION = 0 and CONSTIT_CTE.ISGROUP = 0 and ((T1.ISPRIMARY = 1 and NF.PRIMARYADDRESSEE = 1) or T1.NAMEFORMATTYPECODEID = NF.NAMEFORMATTYPECODEID)
union all
select T2.SEQUENCE from @TEMP_ORGADDRESSEES T2 where CONSTIT_CTE.ISORGANIZATION = 1 and ((T2.ISPRIMARY = 1 and NF.PRIMARYADDRESSEE = 1) or T2.NAMEFORMATTYPECODEID = NF.NAMEFORMATTYPECODEID)
union all
select T3.SEQUENCE from @TEMP_GROUPADDRESSEES T3 where CONSTIT_CTE.ISGROUP = 1 and ((T3.ISPRIMARY = 1 and NF.PRIMARYADDRESSEE = 1) or T3.NAMEFORMATTYPECODEID = NF.NAMEFORMATTYPECODEID)
) as T
left join dbo.NAMEFORMATFUNCTION on CONSTIT_CTE.ISORGANIZATION = 0 and CONSTIT_CTE.ISGROUP = 0 and NAMEFORMATFUNCTION.ID = NF.NAMEFORMATFUNCTIONID
) as SUB
where SUB.SEQUENCE = 1
),
SALUTATION_CTE as
(
select
SUB.CONSTITUENTID,
SUB.MAILTOCONSTITUENTID,
SUB.CUSTOMNAME,
SUB.NAMEFORMATFUNCTIONID,
SUB.ISJOINTFUNCTION
from (
select
NF.CONSTITUENTID,
NF.MAILTOCONSTITUENTID,
NF.CUSTOMNAME,
NF.NAMEFORMATFUNCTIONID,
NAMEFORMATFUNCTION.ISJOINTFUNCTION,
row_number() over (partition by NF.CONSTITUENTID, NF.MAILTOCONSTITUENTID order by T.SEQUENCE) as SEQUENCE
from CONSTIT_CTE
inner join #TEMPNAMEFORMAT NF on NF.CONSTITUENTID = CONSTIT_CTE.CONSTITUENTID and NF.MAILTOCONSTITUENTID = (case when CONSTIT_CTE.ISORGANIZATION = 1 then CONSTIT_CTE.CONTACTID when CONSTIT_CTE.ISGROUP = 1 then CONSTIT_CTE.MEMBERID else CONSTIT_CTE.CONSTITUENTID end)
cross apply (
select T1.SEQUENCE from @TEMP_INDIVIDUALSALUTATIONS T1 where CONSTIT_CTE.ISORGANIZATION = 0 and CONSTIT_CTE.ISGROUP = 0 and ((T1.ISPRIMARY = 1 and NF.PRIMARYSALUTATION = 1) or T1.NAMEFORMATTYPECODEID = NF.NAMEFORMATTYPECODEID)
union all
select T2.SEQUENCE from @TEMP_ORGSALUTATIONS T2 where CONSTIT_CTE.ISORGANIZATION = 1 and ((T2.ISPRIMARY = 1 and NF.PRIMARYSALUTATION = 1) or T2.NAMEFORMATTYPECODEID = NF.NAMEFORMATTYPECODEID)
union all
select T3.SEQUENCE from @TEMP_GROUPSALUTATIONS T3 where CONSTIT_CTE.ISGROUP = 1 and ((T3.ISPRIMARY = 1 and NF.PRIMARYSALUTATION = 1) or T3.NAMEFORMATTYPECODEID = NF.NAMEFORMATTYPECODEID)
) as T
left join dbo.NAMEFORMATFUNCTION on CONSTIT_CTE.ISORGANIZATION = 0 and CONSTIT_CTE.ISGROUP = 0 and NAMEFORMATFUNCTION.ID = NF.NAMEFORMATFUNCTIONID
) as SUB
where SUB.SEQUENCE = 1
)
insert into #TEMP_MAILING_NAMEFORMATS ([CONSTITUENTID], [MAILTOCONSTITUENTID], [ADDRESSEE], [SALUTATION], [CONTACT])
select
CONSTIT_CTE.[CONSTITUENTID],
coalesce(CONSTIT_CTE.CONTACTID, CONSTIT_CTE.MEMBERID, CONSTIT_CTE.CONSTITUENTID) as [MAILTOCONSTITUENTID],
(case when CONSTIT_CTE.ISORGANIZATION = 1 or CONSTIT_CTE.ISGROUP = 1 then
CONSTIT_CTE.NAME
else
(case when len(ADDRESSEE_CTE.CUSTOMNAME) > 0 then
ADDRESSEE_CTE.CUSTOMNAME
else
(case when isnull(ADDRESSEE_CTE.ISJOINTFUNCTION, @ADDRESSEEFUNCTIONISJOINT) = 1 and CONSTIT_CTE.EXCLUDESPOUSE = 0 and dbo.UFN_MAILING_GETNAMEFORMATS_JOINTPROCESSOR(CONSTIT_CTE.CONSTITUENTID, SPOUSECONSTIT.ID, CONSTIT_CTE.GENDERCODE, SPOUSECONSTIT.GENDERCODE, @JOINTRULETYPECODE, @JOINTSELECTIONID, @JOINTSELECTIONBOTHRULETYPECODE, @JOINTSELECTIONNEITHERRULETYPECODE, CONSTIT_CTE.GENDERCODEID, SPOUSECONSTIT.GENDERCODEID) = SPOUSECONSTIT.ID and dbo.[UFN_NAMEFORMATFUNCTION_ISJOINTSPOUSEFIELDFIRST](isnull(ADDRESSEE_CTE.NAMEFORMATFUNCTIONID, @ADDRESSEEFUNCTIONID)) = 0 then
--If the joint processor is the spouse, then just swap the params we pass to the function...
--CONDBREAK is not currently handled anywhere, so just remove it, at least for now.
replace(dbo.UFN_BUILDNAMEFORMAT_INTERNAL(isnull(ADDRESSEE_CTE.NAMEFORMATFUNCTIONID, @ADDRESSEEFUNCTIONID), SPOUSECONSTIT.ID, SPOUSECONSTIT.KEYNAME, SPOUSECONSTIT.FIRSTNAME, SPOUSECONSTIT.MIDDLENAME, SPOUSETITLE.[DESCRIPTION], SPOUSESUFFIX.[DESCRIPTION], CONSTIT_CTE.KEYNAME, CONSTIT_CTE.FIRSTNAME, CONSTIT_CTE.MIDDLENAME, CONSTIT_CTE.TITLE, CONSTIT_CTE.SUFFIX, 0), N'{CONDBREAK}', N' ')
else
--CONDBREAK is not currently handled anywhere, so just remove it, at least for now.
replace(dbo.UFN_BUILDNAMEFORMAT_INTERNAL(isnull(ADDRESSEE_CTE.NAMEFORMATFUNCTIONID, @ADDRESSEEFUNCTIONID), CONSTIT_CTE.CONSTITUENTID, CONSTIT_CTE.KEYNAME, CONSTIT_CTE.FIRSTNAME, CONSTIT_CTE.MIDDLENAME, CONSTIT_CTE.TITLE, CONSTIT_CTE.SUFFIX, SPOUSECONSTIT.KEYNAME, SPOUSECONSTIT.FIRSTNAME, SPOUSECONSTIT.MIDDLENAME, SPOUSETITLE.[DESCRIPTION], SPOUSESUFFIX.[DESCRIPTION], CONSTIT_CTE.EXCLUDESPOUSE), N'{CONDBREAK}', N' ')
end)
end)
end) as ADDRESSEE,
(case
when CONSTIT_CTE.ISORGANIZATION = 1 then
(case @ORGSALUTATIONCODE
when 1 then
(case when CONSTIT_CTE.CONTACTID is null then
(case when @CONTACTSALUTATIONOPTIONCODE = 1 then @CUSTOMNAME else CONSTIT_CTE.NAME end)
else
(case when len(SALUTATION_CTE.CUSTOMNAME) > 0 then
SALUTATION_CTE.CUSTOMNAME
else
(case when isnull(SALUTATION_CTE.ISJOINTFUNCTION, @CONTACTSALUTATIONFUNCTIONISJOINT) = 1 and CONSTIT_CTE.EXCLUDESPOUSE = 0 and dbo.UFN_MAILING_GETNAMEFORMATS_JOINTPROCESSOR(CONSTIT_CTE.CONTACTID, SPOUSECONSTIT.ID, CONSTIT_CTE.GENDERCODE, SPOUSECONSTIT.GENDERCODE, @JOINTRULETYPECODE, @JOINTSELECTIONID, @JOINTSELECTIONBOTHRULETYPECODE, @JOINTSELECTIONNEITHERRULETYPECODE, CONSTIT_CTE.GENDERCODEID, SPOUSECONSTIT.GENDERCODEID) = SPOUSECONSTIT.ID and dbo.[UFN_NAMEFORMATFUNCTION_ISJOINTSPOUSEFIELDFIRST](isnull(SALUTATION_CTE.NAMEFORMATFUNCTIONID, @CONTACTSALUTATIONFUNCTIONID)) = 0 then
--If the joint processor is the spouse, then just swap the params we pass to the function...
--CONDBREAK is not currently handled anywhere, so just remove it, at least for now.
replace(dbo.UFN_BUILDNAMEFORMAT_INTERNAL(isnull(SALUTATION_CTE.NAMEFORMATFUNCTIONID, @CONTACTSALUTATIONFUNCTIONID), SPOUSECONSTIT.ID, SPOUSECONSTIT.KEYNAME, SPOUSECONSTIT.FIRSTNAME, SPOUSECONSTIT.MIDDLENAME, SPOUSETITLE.[DESCRIPTION], SPOUSESUFFIX.[DESCRIPTION], CONTACTCONSTIT.KEYNAME, CONTACTCONSTIT.FIRSTNAME, CONTACTCONSTIT.MIDDLENAME, CONTACTTITLE.[DESCRIPTION], CONTACTSUFFIX.[DESCRIPTION], 0), N'{CONDBREAK}', N' ')
else
--CONDBREAK is not currently handled anywhere, so just remove it, at least for now.
replace(dbo.UFN_BUILDNAMEFORMAT_INTERNAL(isnull(SALUTATION_CTE.NAMEFORMATFUNCTIONID, @CONTACTSALUTATIONFUNCTIONID), CONSTIT_CTE.CONTACTID, CONTACTCONSTIT.KEYNAME, CONTACTCONSTIT.FIRSTNAME, CONTACTCONSTIT.MIDDLENAME, CONTACTTITLE.[DESCRIPTION], CONTACTSUFFIX.[DESCRIPTION], SPOUSECONSTIT.KEYNAME, SPOUSECONSTIT.FIRSTNAME, SPOUSECONSTIT.MIDDLENAME, SPOUSETITLE.[DESCRIPTION], SPOUSESUFFIX.[DESCRIPTION], CONSTIT_CTE.EXCLUDESPOUSE), N'{CONDBREAK}', N' ')
end)
end)
end)
when 2 then
@CUSTOMNAME
else
CONSTIT_CTE.NAME
end)
when CONSTIT_CTE.ISGROUP = 1 then
(case @GROUPSALUTATIONCODE
when 1 then
(case when CONSTIT_CTE.MEMBERID is null then
(case when @GROUPNOCONTACTOPTIONCODE = 1 then @GROUPNOCONTACTCUSTOMNAME else CONSTIT_CTE.NAME end)
else
(case when len(SALUTATION_CTE.CUSTOMNAME) > 0 then
SALUTATION_CTE.CUSTOMNAME
else
(case when isnull(SALUTATION_CTE.ISJOINTFUNCTION, @GROUPSALUTATIONFUNCTIONISJOINT) = 1 and CONSTIT_CTE.EXCLUDESPOUSE = 0 and dbo.UFN_MAILING_GETNAMEFORMATS_JOINTPROCESSOR(CONSTIT_CTE.MEMBERID, SPOUSECONSTIT.ID, CONSTIT_CTE.GENDERCODE, SPOUSECONSTIT.GENDERCODE, @JOINTRULETYPECODE, @JOINTSELECTIONID, @JOINTSELECTIONBOTHRULETYPECODE, @JOINTSELECTIONNEITHERRULETYPECODE, CONSTIT_CTE.GENDERCODEID, SPOUSECONSTIT.GENDERCODEID) = SPOUSECONSTIT.ID and dbo.[UFN_NAMEFORMATFUNCTION_ISJOINTSPOUSEFIELDFIRST](isnull(SALUTATION_CTE.NAMEFORMATFUNCTIONID, @GROUPSALUTATIONFUNCTIONID)) = 0 then
--If the joint processor is the spouse, then just swap the params we pass to the function...
--CONDBREAK is not currently handled anywhere, so just remove it, at least for now.
replace(dbo.UFN_BUILDNAMEFORMAT_INTERNAL(isnull(SALUTATION_CTE.NAMEFORMATFUNCTIONID, @GROUPSALUTATIONFUNCTIONID), SPOUSECONSTIT.ID, SPOUSECONSTIT.KEYNAME, SPOUSECONSTIT.FIRSTNAME, SPOUSECONSTIT.MIDDLENAME, SPOUSETITLE.[DESCRIPTION], SPOUSESUFFIX.[DESCRIPTION], GROUPCONSTIT.KEYNAME, GROUPCONSTIT.FIRSTNAME, GROUPCONSTIT.MIDDLENAME, GROUPTITLE.[DESCRIPTION], GROUPSUFFIX.[DESCRIPTION], 0), N'{CONDBREAK}', N' ')
else
--CONDBREAK is not currently handled anywhere, so just remove it, at least for now.
replace(dbo.UFN_BUILDNAMEFORMAT_INTERNAL(isnull(SALUTATION_CTE.NAMEFORMATFUNCTIONID, @GROUPSALUTATIONFUNCTIONID), CONSTIT_CTE.MEMBERID, GROUPCONSTIT.KEYNAME, GROUPCONSTIT.FIRSTNAME, GROUPCONSTIT.MIDDLENAME, GROUPTITLE.[DESCRIPTION], GROUPSUFFIX.[DESCRIPTION], SPOUSECONSTIT.KEYNAME, SPOUSECONSTIT.FIRSTNAME, SPOUSECONSTIT.MIDDLENAME, SPOUSETITLE.[DESCRIPTION], SPOUSESUFFIX.[DESCRIPTION], CONSTIT_CTE.EXCLUDESPOUSE), N'{CONDBREAK}', N' ')
end)
end)
end)
when 2 then
@GROUPNOCONTACTCUSTOMNAME
else
CONSTIT_CTE.NAME
end)
else
(case when len(SALUTATION_CTE.CUSTOMNAME) > 0 then
SALUTATION_CTE.CUSTOMNAME
else
(case when isnull(SALUTATION_CTE.ISJOINTFUNCTION, @SALUTATIONFUNCTIONISJOINT) = 1 and CONSTIT_CTE.EXCLUDESPOUSE = 0 and dbo.UFN_MAILING_GETNAMEFORMATS_JOINTPROCESSOR(CONSTIT_CTE.CONSTITUENTID, SPOUSECONSTIT.ID, CONSTIT_CTE.GENDERCODE, SPOUSECONSTIT.GENDERCODE, @JOINTRULETYPECODE, @JOINTSELECTIONID, @JOINTSELECTIONBOTHRULETYPECODE, @JOINTSELECTIONNEITHERRULETYPECODE, CONSTIT_CTE.GENDERCODEID, SPOUSECONSTIT.GENDERCODEID) = SPOUSECONSTIT.ID and dbo.[UFN_NAMEFORMATFUNCTION_ISJOINTSPOUSEFIELDFIRST](isnull(SALUTATION_CTE.NAMEFORMATFUNCTIONID, @SALUTATIONFUNCTIONID)) = 0 then
--If the joint processor is the spouse, then just swap the params we pass to the function...
--CONDBREAK is not currently handled anywhere, so just remove it, at least for now.
replace(dbo.UFN_BUILDNAMEFORMAT_INTERNAL(isnull(SALUTATION_CTE.NAMEFORMATFUNCTIONID, @SALUTATIONFUNCTIONID), SPOUSECONSTIT.ID, SPOUSECONSTIT.KEYNAME, SPOUSECONSTIT.FIRSTNAME, SPOUSECONSTIT.MIDDLENAME, SPOUSETITLE.[DESCRIPTION], SPOUSESUFFIX.[DESCRIPTION], CONSTIT_CTE.KEYNAME, CONSTIT_CTE.FIRSTNAME, CONSTIT_CTE.MIDDLENAME, CONSTIT_CTE.TITLE, CONSTIT_CTE.SUFFIX, 0), N'{CONDBREAK}', N' ')
else
--CONDBREAK is not currently handled anywhere, so just remove it, at least for now.
replace(dbo.UFN_BUILDNAMEFORMAT_INTERNAL(isnull(SALUTATION_CTE.NAMEFORMATFUNCTIONID, @SALUTATIONFUNCTIONID), CONSTIT_CTE.CONSTITUENTID, CONSTIT_CTE.KEYNAME, CONSTIT_CTE.FIRSTNAME, CONSTIT_CTE.MIDDLENAME, CONSTIT_CTE.TITLE, CONSTIT_CTE.SUFFIX, SPOUSECONSTIT.KEYNAME, SPOUSECONSTIT.FIRSTNAME, SPOUSECONSTIT.MIDDLENAME, SPOUSETITLE.[DESCRIPTION], SPOUSESUFFIX.[DESCRIPTION], CONSTIT_CTE.EXCLUDESPOUSE), N'{CONDBREAK}', N' ')
end)
end)
end) as SALUTATION,
(case
when CONSTIT_CTE.ISORGANIZATION = 1 then
(case when CONSTIT_CTE.CONTACTID is null then
--No contact found
null
else
(case when len(ADDRESSEE_CTE.CUSTOMNAME) > 0 then
ADDRESSEE_CTE.CUSTOMNAME
else
(case when isnull(ADDRESSEE_CTE.ISJOINTFUNCTION, @CONTACTADDRESSEEFUNCTIONISJOINT) = 1 and CONSTIT_CTE.EXCLUDESPOUSE = 0 and dbo.UFN_MAILING_GETNAMEFORMATS_JOINTPROCESSOR(CONSTIT_CTE.CONTACTID, SPOUSECONSTIT.ID, CONSTIT_CTE.GENDERCODE, SPOUSECONSTIT.GENDERCODE, @JOINTRULETYPECODE, @JOINTSELECTIONID, @JOINTSELECTIONBOTHRULETYPECODE, @JOINTSELECTIONNEITHERRULETYPECODE, CONSTIT_CTE.GENDERCODEID, SPOUSECONSTIT.GENDERCODEID) = SPOUSECONSTIT.ID and dbo.[UFN_NAMEFORMATFUNCTION_ISJOINTSPOUSEFIELDFIRST](isnull(ADDRESSEE_CTE.NAMEFORMATFUNCTIONID, @CONTACTADDRESSEEFUNCTIONID)) = 0 then
--If the joint processor is the spouse, then just swap the params we pass to the function...
--CONDBREAK is not currently handled anywhere, so just remove it, at least for now.
replace(dbo.UFN_BUILDNAMEFORMAT_INTERNAL(isnull(ADDRESSEE_CTE.NAMEFORMATFUNCTIONID, @CONTACTADDRESSEEFUNCTIONID), SPOUSECONSTIT.ID, SPOUSECONSTIT.KEYNAME, SPOUSECONSTIT.FIRSTNAME, SPOUSECONSTIT.MIDDLENAME, SPOUSETITLE.[DESCRIPTION], SPOUSESUFFIX.[DESCRIPTION], CONTACTCONSTIT.KEYNAME, CONTACTCONSTIT.FIRSTNAME, CONTACTCONSTIT.MIDDLENAME, CONTACTTITLE.[DESCRIPTION], CONTACTSUFFIX.[DESCRIPTION], 0), N'{CONDBREAK}', N' ')
else
--CONDBREAK is not currently handled anywhere, so just remove it, at least for now.
replace(dbo.UFN_BUILDNAMEFORMAT_INTERNAL(isnull(ADDRESSEE_CTE.NAMEFORMATFUNCTIONID, @CONTACTADDRESSEEFUNCTIONID), CONSTIT_CTE.CONTACTID, CONTACTCONSTIT.KEYNAME, CONTACTCONSTIT.FIRSTNAME, CONTACTCONSTIT.MIDDLENAME, CONTACTTITLE.[DESCRIPTION], CONTACTSUFFIX.[DESCRIPTION], SPOUSECONSTIT.KEYNAME, SPOUSECONSTIT.FIRSTNAME, SPOUSECONSTIT.MIDDLENAME, SPOUSETITLE.[DESCRIPTION], SPOUSESUFFIX.[DESCRIPTION], CONSTIT_CTE.EXCLUDESPOUSE), N'{CONDBREAK}', N' ')
end)
end)
end)
when CONSTIT_CTE.ISGROUP = 1 then
(case when CONSTIT_CTE.MEMBERID is null then
--No group members found
null
else
(case when len(ADDRESSEE_CTE.CUSTOMNAME) > 0 then
ADDRESSEE_CTE.CUSTOMNAME
else
(case when isnull(ADDRESSEE_CTE.ISJOINTFUNCTION, @GROUPADDRESSEEFUNCTIONISJOINT) = 1 and CONSTIT_CTE.EXCLUDESPOUSE = 0 and dbo.UFN_MAILING_GETNAMEFORMATS_JOINTPROCESSOR(CONSTIT_CTE.MEMBERID, SPOUSECONSTIT.ID, CONSTIT_CTE.GENDERCODE, SPOUSECONSTIT.GENDERCODE, @JOINTRULETYPECODE, @JOINTSELECTIONID, @JOINTSELECTIONBOTHRULETYPECODE, @JOINTSELECTIONNEITHERRULETYPECODE, CONSTIT_CTE.GENDERCODEID, SPOUSECONSTIT.GENDERCODEID) = SPOUSECONSTIT.ID and dbo.[UFN_NAMEFORMATFUNCTION_ISJOINTSPOUSEFIELDFIRST](isnull(ADDRESSEE_CTE.NAMEFORMATFUNCTIONID, @GROUPADDRESSEEFUNCTIONID)) = 0 then
--If the joint processor is the spouse, then just swap the params we pass to the function...
--CONDBREAK is not currently handled anywhere, so just remove it, at least for now.
replace(dbo.UFN_BUILDNAMEFORMAT_INTERNAL(isnull(ADDRESSEE_CTE.NAMEFORMATFUNCTIONID, @GROUPADDRESSEEFUNCTIONID), SPOUSECONSTIT.ID, SPOUSECONSTIT.KEYNAME, SPOUSECONSTIT.FIRSTNAME, SPOUSECONSTIT.MIDDLENAME, SPOUSETITLE.[DESCRIPTION], SPOUSESUFFIX.[DESCRIPTION], GROUPCONSTIT.KEYNAME, GROUPCONSTIT.FIRSTNAME, GROUPCONSTIT.MIDDLENAME, GROUPTITLE.[DESCRIPTION], GROUPSUFFIX.[DESCRIPTION], 0), N'{CONDBREAK}', N' ')
else
--CONDBREAK is not currently handled anywhere, so just remove it, at least for now.
replace(dbo.UFN_BUILDNAMEFORMAT_INTERNAL(isnull(ADDRESSEE_CTE.NAMEFORMATFUNCTIONID, @GROUPADDRESSEEFUNCTIONID), CONSTIT_CTE.MEMBERID, GROUPCONSTIT.KEYNAME, GROUPCONSTIT.FIRSTNAME, GROUPCONSTIT.MIDDLENAME, GROUPTITLE.[DESCRIPTION], GROUPSUFFIX.[DESCRIPTION], SPOUSECONSTIT.KEYNAME, SPOUSECONSTIT.FIRSTNAME, SPOUSECONSTIT.MIDDLENAME, SPOUSETITLE.[DESCRIPTION], SPOUSESUFFIX.[DESCRIPTION], CONSTIT_CTE.EXCLUDESPOUSE), N'{CONDBREAK}', N' ')
end)
end)
end)
else
null
end) as CONTACT
from CONSTIT_CTE
left join ADDRESSEE_CTE on ADDRESSEE_CTE.CONSTITUENTID = CONSTIT_CTE.CONSTITUENTID and ADDRESSEE_CTE.MAILTOCONSTITUENTID = (case when CONSTIT_CTE.ISORGANIZATION = 1 then CONSTIT_CTE.CONTACTID when CONSTIT_CTE.ISGROUP = 1 then CONSTIT_CTE.MEMBERID else CONSTIT_CTE.CONSTITUENTID end)
left join SALUTATION_CTE on SALUTATION_CTE.CONSTITUENTID = CONSTIT_CTE.CONSTITUENTID and SALUTATION_CTE.MAILTOCONSTITUENTID = (case when CONSTIT_CTE.ISORGANIZATION = 1 then CONSTIT_CTE.CONTACTID when CONSTIT_CTE.ISGROUP = 1 then CONSTIT_CTE.MEMBERID else CONSTIT_CTE.CONSTITUENTID end)
left join dbo.DECEASEDCONSTITUENT as GROUPDECEASEDCONSTIT on GROUPDECEASEDCONSTIT.ID = CONSTIT_CTE.MEMBERID and CONSTIT_CTE.ISGROUP = 1
left join dbo.CONSTITUENT as GROUPCONSTIT on GROUPCONSTIT.ID = CONSTIT_CTE.MEMBERID and CONSTIT_CTE.ISGROUP = 1 and GROUPDECEASEDCONSTIT.ID is null and GROUPCONSTIT.ISINACTIVE = 0
left join dbo.TITLECODE as GROUPTITLE on GROUPTITLE.ID = GROUPCONSTIT.TITLECODEID and CONSTIT_CTE.ISGROUP = 1
left join dbo.SUFFIXCODE as GROUPSUFFIX on GROUPSUFFIX.ID = GROUPCONSTIT.SUFFIXCODEID and CONSTIT_CTE.ISGROUP = 1
left join dbo.DECEASEDCONSTITUENT as CONTACTDECEASEDCONSTIT on CONTACTDECEASEDCONSTIT.ID = CONSTIT_CTE.CONTACTID and CONSTIT_CTE.ISORGANIZATION = 1
left join dbo.CONSTITUENT as CONTACTCONSTIT on CONTACTCONSTIT.ID = CONSTIT_CTE.CONTACTID and CONSTIT_CTE.ISORGANIZATION = 1 and CONTACTDECEASEDCONSTIT.ID is null and CONTACTCONSTIT.ISINACTIVE = 0
left join dbo.TITLECODE as CONTACTTITLE on CONTACTTITLE.ID = CONTACTCONSTIT.TITLECODEID and CONSTIT_CTE.ISORGANIZATION = 1
left join dbo.SUFFIXCODE as CONTACTSUFFIX on CONTACTSUFFIX.ID = CONTACTCONSTIT.SUFFIXCODEID and CONSTIT_CTE.ISORGANIZATION = 1
left join dbo.RELATIONSHIP on RELATIONSHIP.RELATIONSHIPCONSTITUENTID = (case when CONSTIT_CTE.ISGROUP = 1 then CONSTIT_CTE.MEMBERID when CONSTIT_CTE.ISORGANIZATION = 1 then CONSTIT_CTE.CONTACTID else CONSTIT_CTE.CONSTITUENTID end) and RELATIONSHIP.ISSPOUSE = 1
left join dbo.DECEASEDCONSTITUENT as SPOUSEDECEASEDCONSTIT on SPOUSEDECEASEDCONSTIT.ID = RELATIONSHIP.RECIPROCALCONSTITUENTID
left join dbo.CONSTITUENT as SPOUSECONSTIT on SPOUSECONSTIT.ID = RELATIONSHIP.RECIPROCALCONSTITUENTID and SPOUSEDECEASEDCONSTIT.ID is null and SPOUSECONSTIT.ISINACTIVE = 0
left join dbo.TITLECODE as SPOUSETITLE on SPOUSETITLE.ID = SPOUSECONSTIT.TITLECODEID
left join dbo.SUFFIXCODE as SPOUSESUFFIX on SPOUSESUFFIX.ID = SPOUSECONSTIT.SUFFIXCODEID;
--Create an index on the final results...
create nonclustered index [IX_TEMP_MAILING_NAMEFORMATS_CONSTITUENTID_MAILTOCONSTITUENTID] on #TEMP_MAILING_NAMEFORMATS ([CONSTITUENTID], [MAILTOCONSTITUENTID])
include ([ADDRESSEE], [SALUTATION], [CONTACT]);
--Debug only
--set @STATUS = 'Final results... ' + cast((select count(*) from #TEMP_MAILING_NAMEFORMATS) as nvarchar(10)) + ' rows... ' + cast(datediff(s, @STARTDATE, getdate()) as nvarchar(10)) + ' seconds';
--raiserror(@STATUS, 0, 1) with nowait;
/****************************************************/
/* Clean up */
/****************************************************/
drop table #TEMPCONSTITUENT;
drop table #TEMPNAMEFORMAT;
end try
begin catch
exec dbo.[USP_RAISE_ERROR];
if object_id('tempdb..#TEMPCONSTITUENT') is not null
drop table #TEMPCONSTITUENT;
if object_id('tempdb..#TEMPNAMEFORMAT') is not null
drop table #TEMPNAMEFORMAT;
return 1;
end catch
return 0;