USP_REPORT_DUPLICATECONSTITUENTS
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CHECKLASTNAME | bit | IN | |
@CHECKFIRSTNAME | bit | IN | |
@CHECKZIP | bit | IN | |
@CHECKPRIMARYEMAIL | bit | IN | |
@CHECKPRIMARYPHONE | bit | IN | |
@FILTERBYDATE | bit | IN | |
@ADDEDAFTERDATE | datetime | IN | |
@EXCLUDERELATIONSHIPS | bit | IN |
Definition
Copy
create procedure dbo.USP_REPORT_DUPLICATECONSTITUENTS
(
@CHECKLASTNAME bit = 1,
@CHECKFIRSTNAME bit = 1,
@CHECKZIP bit = 0,
@CHECKPRIMARYEMAIL bit = 0,
@CHECKPRIMARYPHONE bit = 0,
@FILTERBYDATE bit = 0,
@ADDEDAFTERDATE datetime = null,
@EXCLUDERELATIONSHIPS bit = 1
)
with execute as owner
as
set @ADDEDAFTERDATE = dbo.UFN_DATE_GETEARLIESTTIME(@ADDEDAFTERDATE)
declare @PARAMSEXIST bit = (@CHECKLASTNAME | @CHECKFIRSTNAME | @CHECKZIP | @CHECKPRIMARYEMAIL | @CHECKPRIMARYPHONE)
declare @ORDERBYCLAUSE nvarchar(255) = ''
declare @SQLTOEXEC nvarchar(max)
set @SQLTOEXEC =
'select distinct top(500) C1.ID,C1.NAME
'
if @CHECKZIP = 1
set @SQLTOEXEC = @SQLTOEXEC + ',A1.DESCRIPTION ADDRESS'
else
set @SQLTOEXEC = @SQLTOEXEC + ',A.DESCRIPTION ADDRESS'
if @CHECKPRIMARYPHONE = 1
set @SQLTOEXEC = @SQLTOEXEC + ',P1.NUMBER PHONE'
else
set @SQLTOEXEC = @SQLTOEXEC + ',P.NUMBER PHONE'
if @CHECKPRIMARYEMAIL = 1
set @SQLTOEXEC = @SQLTOEXEC + ',E1.EMAILADDRESS EMAIL'
else
set @SQLTOEXEC = @SQLTOEXEC + ',E.EMAILADDRESS EMAIL'
set @SQLTOEXEC = @SQLTOEXEC + ',C1.LOOKUPID,C1.DATEADDED'
set @SQLTOEXEC = @SQLTOEXEC + '
from dbo.CONSTITUENT C1
'
if @CHECKLASTNAME = 1 or @CHECKFIRSTNAME = 1
begin
set @SQLTOEXEC = @SQLTOEXEC +
'inner join dbo.CONSTITUENT C2
'
end
if @CHECKLASTNAME = 1
begin
if @CHECKFIRSTNAME = 1
begin
set @ORDERBYCLAUSE = 'order by C1.NAME'
set @SQLTOEXEC = @SQLTOEXEC +
'on C1.KEYNAME = C2.KEYNAME and C1.FIRSTNAME = C2.FIRSTNAME and C1.ID <> C2.ID
'
end
else
begin
set @ORDERBYCLAUSE = 'order by C1.NAME'
set @SQLTOEXEC = @SQLTOEXEC +
'on C1.KEYNAME = C2.KEYNAME and C1.ID <> C2.ID
'
end
end
else
begin
if @CHECKFIRSTNAME = 1
begin
set @ORDERBYCLAUSE = 'order by C1.NAME'
set @SQLTOEXEC = @SQLTOEXEC +
'on C1.FIRSTNAME = C2.FIRSTNAME and C1.FIRSTNAME <> '''' and C1.ID <> C2.ID
'
end
end
if @CHECKFIRSTNAME = 1 or @CHECKLASTNAME = 1
begin
if @CHECKZIP = 1
begin
set @SQLTOEXEC = @SQLTOEXEC +
'inner join dbo.ADDRESS A1 on A1.CONSTITUENTID = C1.ID and A1.ISPRIMARY = 1
inner join dbo.ADDRESS A2 on A2.CONSTITUENTID = C2.ID and A1.POSTCODE = A2.POSTCODE and A1.POSTCODE <> '''' and A2.ISPRIMARY = 1
'
end
if @CHECKPRIMARYPHONE = 1
begin
set @SQLTOEXEC = @SQLTOEXEC +
'inner join dbo.PHONE P1 on P1.CONSTITUENTID = C1.ID and P1.ISPRIMARY = 1
inner join dbo.PHONE P2 on P2.CONSTITUENTID = C2.ID and P1.NUMBER = P2.NUMBER and P1.NUMBER <> '''' and P1.ISPRIMARY = 1
'
end
if @CHECKPRIMARYEMAIL = 1
begin
set @SQLTOEXEC = @SQLTOEXEC +
'inner join dbo.EMAILADDRESS E1 on E1.CONSTITUENTID = C1.ID and E1.ISPRIMARY = 1
inner join dbo.EMAILADDRESS E2 on E2.CONSTITUENTID = C2.ID and E2.EMAILADDRESS = E1.EMAILADDRESS and E1.EMAILADDRESS <> '''' and E2.ISPRIMARY = 1
'
end
end
else
begin
if @CHECKZIP = 1
begin
if @ORDERBYCLAUSE = ''
begin
set @ORDERBYCLAUSE = 'order by A1.DESCRIPTION'
end
set @SQLTOEXEC = @SQLTOEXEC +
'inner join dbo.ADDRESS A1 on A1.CONSTITUENTID = C1.ID and A1.ISPRIMARY = 1
inner join dbo.ADDRESS A2 on A1.CONSTITUENTID <> A2.CONSTITUENTID and A2.POSTCODE = A1.POSTCODE and A2.POSTCODE <> '''' and A2.ISPRIMARY = 1
'
end
if @CHECKPRIMARYPHONE = 1
begin
if @ORDERBYCLAUSE = ''
begin
set @ORDERBYCLAUSE = 'order by P1.NUMBER'
end
set @SQLTOEXEC = @SQLTOEXEC +
'inner join dbo.PHONE P1 on P1.CONSTITUENTID = C1.ID and P1.ISPRIMARY = 1
inner join dbo.PHONE P2 on P1.CONSTITUENTID <> P2.CONSTITUENTID and P2.NUMBER = P1.NUMBER and P2.NUMBER <> '''' and P2.ISPRIMARY = 1
'
end
if @CHECKPRIMARYEMAIL = 1
begin
if @ORDERBYCLAUSE = ''
begin
set @ORDERBYCLAUSE = 'order by E1.EMAILADDRESS'
end
set @SQLTOEXEC = @SQLTOEXEC +
'inner join dbo.EMAILADDRESS E1 on E1.CONSTITUENTID = C1.ID and E1.ISPRIMARY = 1
inner join dbo.EMAILADDRESS E2 on E1.CONSTITUENTID <> E2.CONSTITUENTID and E2.EMAILADDRESS = E1.EMAILADDRESS and E2.EMAILADDRESS <> '''' and E2.ISPRIMARY = 1
'
end
end
if @CHECKZIP = 0
begin
set @SQLTOEXEC = @SQLTOEXEC +
'left outer join dbo.[ADDRESS] A on A.CONSTITUENTID = C1.ID and A.ISPRIMARY = 1
'
end
if @CHECKPRIMARYPHONE = 0
begin
set @SQLTOEXEC = @SQLTOEXEC +
'left outer join dbo.PHONE P on P.CONSTITUENTID = C1.ID and P.ISPRIMARY = 1
'
end
if @CHECKPRIMARYEMAIL = 0
begin
set @SQLTOEXEC = @SQLTOEXEC +
'left outer join dbo.EMAILADDRESS E on E.CONSTITUENTID = C1.ID and E.ISPRIMARY = 1
'
end
if @PARAMSEXIST = 1
begin
if @EXCLUDERELATIONSHIPS = 1
begin
if @CHECKLASTNAME = 0 and @CHECKFIRSTNAME = 0
begin
declare @INNERJOINSTARTED bit = 0
if @CHECKZIP = 1
begin
set @INNERJOINSTARTED = 1
set @SQLTOEXEC = @SQLTOEXEC +
'inner join dbo.CONSTITUENT C2 on A2.CONSTITUENTID = C2.ID
'
end
if @CHECKPRIMARYPHONE = 1
begin
if @INNERJOINSTARTED = 0
begin
set @INNERJOINSTARTED = 1
set @SQLTOEXEC = @SQLTOEXEC +
'inner join dbo.CONSTITUENT C2 on P2.CONSTITUENTID = C2.ID
'
end
else
begin
set @SQLTOEXEC = @SQLTOEXEC +
'or P2.CONSTITUENTID = C2.ID
'
end
end
if @CHECKPRIMARYEMAIL = 1
begin
if @INNERJOINSTARTED = 0
begin
set @INNERJOINSTARTED = 1
set @SQLTOEXEC = @SQLTOEXEC +
'inner join dbo.CONSTITUENT C2 on E2.CONSTITUENTID = C2.ID
'
end
else
begin
set @SQLTOEXEC = @SQLTOEXEC +
'or E2.CONSTITUENTID = C2.ID
'
end
end
end
set @SQLTOEXEC = @SQLTOEXEC +
'where not exists(select 1 from dbo.RELATIONSHIP where RELATIONSHIPCONSTITUENTID = C1.ID and RECIPROCALCONSTITUENTID = C2.ID)
'
if @CHECKFIRSTNAME = 0 and @CHECKLASTNAME = 0
begin
set @SQLTOEXEC = @SQLTOEXEC +
'and C1.ISGROUP = 0 and C2.ISGROUP = 0
'
end
if @FILTERBYDATE = 1
begin
set @SQLTOEXEC = @SQLTOEXEC +
'and (C1.DATEADDED > @ADDEDAFTERDATE and C2.DATEADDED > @ADDEDAFTERDATE)
'
end
end
else
begin
if @FILTERBYDATE = 1
begin
set @SQLTOEXEC = @SQLTOEXEC +
'where (C1.DATEADDED > @ADDEDAFTERDATE)
'
end
end
set @SQLTOEXEC = @SQLTOEXEC + @ORDERBYCLAUSE
exec sp_executesql @SQLTOEXEC, N'@ADDEDAFTERDATE datetime', @ADDEDAFTERDATE = @ADDEDAFTERDATE
end