USP_CONSTITUENTDUPLICATESEARCHPROCESS_GETCONSTITUENTS
Return constituents for comparison in the constituent duplicate search process.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONTEXTID | uniqueidentifier | IN | |
@CONSTITUENTSOUNDEX | nvarchar(4) | IN | |
@REQUIRESECONDARYMATCH | bit | IN | |
@INCLUDEGROUPS | bit | IN | |
@INCLUDEORGANIZATIONS | bit | IN | |
@INCLUDEINACTIVE | bit | IN | |
@INCLUDEDECEASED | bit | IN | |
@CHECKMIDDLENAME | bit | IN | |
@CHECKMAIDENNAME | bit | IN | |
@ISINCREMENTAL | bit | IN | |
@LASTRUNON | datetime | IN | |
@POSTCODEPREFIXLENGTH | tinyint | IN |
Definition
Copy
CREATE procedure dbo.USP_CONSTITUENTDUPLICATESEARCHPROCESS_GETCONSTITUENTS
(
@CONTEXTID uniqueidentifier,
@CONSTITUENTSOUNDEX nvarchar(4),
@REQUIRESECONDARYMATCH bit,
@INCLUDEGROUPS bit,
@INCLUDEORGANIZATIONS bit,
@INCLUDEINACTIVE bit,
@INCLUDEDECEASED bit,
@CHECKMIDDLENAME bit,
@CHECKMAIDENNAME bit,
@ISINCREMENTAL bit,
@LASTRUNON datetime = null,
@POSTCODEPREFIXLENGTH tinyint = 12
)
as
begin
if OBJECT_ID('tempdb..#TMP_CONSTITUENTS') is not null
drop table #TMP_CONSTITUENTS
create table #TMP_CONSTITUENTS (
ID uniqueidentifier primary key
)
insert into #TMP_CONSTITUENTS (ID)
select
CONSTITUENT.ID as ID
from dbo.CONSTITUENT with (nolock)
left join dbo.DECEASEDCONSTITUENT (nolock) on DECEASEDCONSTITUENT.ID = CONSTITUENT.ID
where
( (CONSTITUENT.ISGROUP = 0 and CONSTITUENT.KEYNAMESOUNDEX = @CONSTITUENTSOUNDEX)
) and
(@INCLUDEINACTIVE = 1 or CONSTITUENT.ISINACTIVE = 0) and
(@INCLUDEDECEASED = 1 or DECEASEDCONSTITUENT.ID is null) and
(@INCLUDEORGANIZATIONS = 1 or CONSTITUENT.ISORGANIZATION = 0)
if @INCLUDEGROUPS = 1
begin
insert into #TMP_CONSTITUENTS (ID)
select GROUPMEMBER.GROUPID from dbo.CONSTITUENT CONSTITUENTMEMBER
inner join #TMP_CONSTITUENTS on #TMP_CONSTITUENTS.ID = CONSTITUENTMEMBER.ID
inner join dbo.GROUPMEMBER on CONSTITUENTMEMBER.ID = GROUPMEMBER.MEMBERID and GROUPMEMBER.ISPRIMARY = 1
inner join dbo.GROUPDATA on GROUPDATA.ID = GROUPMEMBER.GROUPID
where GROUPDATA.GROUPTYPECODE = 0
insert into #TMP_CONSTITUENTS (ID)
select GROUPDATA.ID from dbo.GROUPDATA
inner join dbo.CONSTITUENT on GROUPDATA.ID = CONSTITUENT.ID
where GROUPDATA.GROUPTYPECODE <> 0 and CONSTITUENT.KEYNAMESOUNDEX = @CONSTITUENTSOUNDEX
and (@INCLUDEINACTIVE = 1 or CONSTITUENT.ISINACTIVE = 0)
end
if @CHECKMAIDENNAME = 1
insert into #TMP_CONSTITUENTS (ID)
select CONSTITUENT.ID from dbo.CONSTITUENT
left join dbo.DECEASEDCONSTITUENT (nolock) on DECEASEDCONSTITUENT.ID = CONSTITUENT.ID
where CONSTITUENT.MAIDENNAME <> '' and soundex(CONSTITUENT.MAIDENNAME) = @CONSTITUENTSOUNDEX
and
CONSTITUENT.ISGROUP = 0 and CONSTITUENT.ISORGANIZATION = 0 and
(@INCLUDEINACTIVE = 1 or CONSTITUENT.ISINACTIVE = 0) and
(@INCLUDEDECEASED = 1 or DECEASEDCONSTITUENT.ID is null)
and not exists (select 1 from #TMP_CONSTITUENTS where #TMP_CONSTITUENTS.ID = CONSTITUENT.ID)
if @ISINCREMENTAL = 1 and @LASTRUNON is null
set @ISINCREMENTAL = 0;
select
CONSTITUENT.ID as ID,
case CONSTITUENT.ISORGANIZATION
when 1 then CONSTITUENT.NAME
else
case CONSTITUENT.ISGROUP
when 1 then CONSTITUENT.NAME
else
case CONSTITUENT.FIRSTNAME
when '' then ''
else CONSTITUENT.FIRSTNAME + ' '
end +
case CONSTITUENT.MIDDLENAME
when '' then ''
else
case @CHECKMIDDLENAME
when 1 then CONSTITUENT.MIDDLENAME + ' '
else ''
end
end +
case CONSTITUENT.MAIDENNAME
when '' then ''
else
case @CHECKMAIDENNAME
when 1 then CONSTITUENT.MAIDENNAME + ' '
else ''
end
end +
CONSTITUENT.KEYNAME
end
end + ' ' + dbo.UFN_SUFFIXCODE_GETDESCRIPTION(CONSTITUENT.SUFFIXCODEID) as FULLNAME,
ADDRESS.ID as ADDRESSID,
case
when ADDRESS.ID is not null then
substring(dbo.UFN_BUILDFULLADDRESS(ADDRESS.ID, ADDRESS.ADDRESSBLOCK, ADDRESS.CITY, ADDRESS.STATEID, left(ADDRESS.POSTCODE, @POSTCODEPREFIXLENGTH), ADDRESS.COUNTRYID), 0, 150)
else ''
end as FULLADDRESS,
ADDRESS.STATEID as STATEID,
ADDRESS.POSTCODE as POSTCODE,
ADDRESS.COUNTRYID as COUNTRYID,
PHONE.NUMBERNOFORMAT as PHONENUMBER,
EMAILADDRESS.EMAILADDRESS as EMAILADDRESS,
CONSTITUENT.BIRTHDATE as BIRTHDATE,
CONSTITUENT.GENDERCODE as GENDERCODE,
CONSTITUENT.KEYNAMESOUNDEX as KEYNAMESOUNDEX,
CONSTITUENT.ISGROUP as ISGROUP,
CONSTITUENT.ISORGANIZATION as ISORGANIZATION,
case
when @ISINCREMENTAL = 0 then 1
else
case
when CONSTITUENT.DATEADDED > @LASTRUNON or CONSTITUENT.DATECHANGED > @LASTRUNON then 1
when PHONE.ID is not null and
(
PHONE.DATEADDED > @LASTRUNON or
PHONE.DATECHANGED > @LASTRUNON
) then 1
when ADDRESS.ID is not null and
(
ADDRESS.DATEADDED > @LASTRUNON or
ADDRESS.DATECHANGED > @LASTRUNON
) then 1
when EMAILADDRESS.ID is not null and
(
EMAILADDRESS.DATEADDED > @LASTRUNON or
EMAILADDRESS.DATECHANGED > @LASTRUNON
) then 1
else 0
end
end as CHECKFORMATCH,
CONSTITUENT.GENDERCODEID as GENDERCODEID
from dbo.CONSTITUENT with (nolock)
inner join #TMP_CONSTITUENTS on #TMP_CONSTITUENTS.ID = CONSTITUENT.ID
left join dbo.ADDRESS with (nolock) on
ADDRESS.CONSTITUENTID = CONSTITUENT.ID and
ADDRESS.ISPRIMARY = 1
left join dbo.PHONE (nolock) on
PHONE.CONSTITUENTID = CONSTITUENT.ID and
PHONE.ISPRIMARY = 1
left join dbo.EMAILADDRESS (nolock) on
EMAILADDRESS.CONSTITUENTID = CONSTITUENT.ID and
EMAILADDRESS.ISPRIMARY = 1
where
(
@REQUIRESECONDARYMATCH = 0 or
(ADDRESS.ID is not null or PHONE.ID is not null or EMAILADDRESS.ID is not null)
)
order by CHECKFORMATCH desc
end