TR_ALIAS_UPDATE_SEARCHCONSTITUENT
Definition
Copy
CREATE trigger TR_ALIAS_UPDATE_SEARCHCONSTITUENT on dbo.ALIAS after update not for replication
as begin
if isnull(context_info(),0x)<>0xE2DF375A033A104382689B8EAC5165AD
begin
if update(CONSTITUENTID)
begin
delete from dbo.SEARCHCONSTITUENT
where ALIASID in(select d.ID
from deleted d, inserted i
where d.ID = i.ID
and d.CONSTITUENTID <> i.CONSTITUENTID)
if @@rowcount > 0
begin
declare @NULLID uniqueidentifier = newid()
insert into dbo.SEARCHCONSTITUENT (ID,CONSTITUENTID,ADDRESSID,
KEYNAME,FIRSTNAME,MIDDLENAME,NAMETYPECODE,
TITLECODEID,SUFFIXCODEID,
COUNTRYID,POSTCODE,STREETNUMBER,STREETNAME,
ISORGANIZATION,ISGROUP,ALIASID)
select newid(),
c.ID,
a.ID,
CLEANSTRINGS.ALIASKEYNAME,
CLEANSTRINGS.ALIASFIRSTNAME,
CLEANSTRINGS.ALIASMIDDLENAME,
3,
inserted.TITLECODEID,
inserted.SUFFIXCODEID,
a.COUNTRYID,
case when ltrim(rtrim(a.POSTCODE)) like '[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]' then left(ltrim(a.POSTCODE),5) else ltrim(rtrim(a.POSTCODE)) end,
isnull(PARSEDADDRESS.STREETNUMBER,''),
isnull(PARSEDADDRESS.STREETNAME,CLEANSTRINGS.ADDRESSBLOCK),
c.ISORGANIZATION,
c.ISGROUP,
inserted.ID
from inserted
inner join deleted on deleted.ID = inserted.ID and deleted.CONSTITUENTID <> inserted.CONSTITUENTID
inner join dbo.SEARCHCONSTITUENTALIASTYPE on SEARCHCONSTITUENTALIASTYPE.ID = inserted.ALIASTYPECODEID
inner join dbo.CONSTITUENT c on c.ID = inserted.CONSTITUENTID
left outer join dbo.ADDRESS a on a.CONSTITUENTID = c.ID
cross apply (select ltrim(rtrim(upper(replace(replace(replace(replace(replace(replace(replace(replace(
a.ADDRESSBLOCK,'.',''),'-',' '),',',' '),
char(13)+char(10),' '),char(10)+char(13),' '),char(13),' '),char(10),' '),' ',' ')))) ADDRESSBLOCK,
upper(ltrim(rtrim(replace(inserted.FIRSTNAME,'.','')))) ALIASFIRSTNAME,
upper(ltrim(rtrim(replace(inserted.MIDDLENAME,'.','')))) ALIASMIDDLENAME,
upper(ltrim(rtrim(replace(replace(inserted.KEYNAME,'.',''),'''','')))) ALIASKEYNAME,
upper(ltrim(rtrim(replace(c.FIRSTNAME,'.','')))) CONSTITUENTFIRSTNAME,
upper(ltrim(rtrim(replace(c.MIDDLENAME,'.','')))) CONSTITUENTMIDDLENAME,
upper(ltrim(rtrim(replace(replace(c.KEYNAME,'.',''),'''','')))) CONSTITUENTKEYNAME) CLEANSTRINGS
outer apply (select left(CLEANSTRINGS.ADDRESSBLOCK,charindex(' ',CLEANSTRINGS.ADDRESSBLOCK)-1) STREETNUMBER,
right(CLEANSTRINGS.ADDRESSBLOCK,len(CLEANSTRINGS.ADDRESSBLOCK)-charindex(' ',CLEANSTRINGS.ADDRESSBLOCK)) STREETNAME
where dbo.UFN_REGULAREXPRESSIONMATCH('(?:^[A-Z]?[\d-]+[A-Z]? (?:.|\n)+$)',CLEANSTRINGS.ADDRESSBLOCK) = 1
and charindex(' ',CLEANSTRINGS.ADDRESSBLOCK)<=13) PARSEDADDRESS
where CLEANSTRINGS.ALIASKEYNAME<>''
and (inserted.TITLECODEID<>isnull(c.TITLECODEID,@NULLID) or
(CLEANSTRINGS.ALIASFIRSTNAME<>CLEANSTRINGS.CONSTITUENTFIRSTNAME and CLEANSTRINGS.ALIASFIRSTNAME<>'') or
(CLEANSTRINGS.ALIASMIDDLENAME<>CLEANSTRINGS.CONSTITUENTMIDDLENAME and CLEANSTRINGS.ALIASMIDDLENAME<>'') or
CLEANSTRINGS.ALIASKEYNAME<>CLEANSTRINGS.CONSTITUENTKEYNAME or
inserted.SUFFIXCODEID<>isnull(c.SUFFIXCODEID,@NULLID))
and c.ISCONSTITUENT = 1
and (c.ISINACTIVE = 0 or (c.ISINACTIVE = 1 and c.ID not in (select SOURCEID from dbo.CONSTITUENTMERGEOPERATIONS)))
end
end
if update(TITLECODEID) or
update(FIRSTNAME) or
update(KEYNAME) or
update(MIDDLENAME) or
update(SUFFIXCODEID)
begin
update sc
set TITLECODEID = inserted.TITLECODEID,
FIRSTNAME = upper(ltrim(rtrim(replace(inserted.FIRSTNAME,'.','')))),
MIDDLENAME = upper(ltrim(rtrim(replace(inserted.MIDDLENAME,'.','')))),
KEYNAME = upper(ltrim(rtrim(replace(replace(inserted.KEYNAME,'.',''),'''','')))),
SUFFIXCODEID = inserted.SUFFIXCODEID
from inserted
inner join dbo.SEARCHCONSTITUENT sc on sc.ALIASID = inserted.ID
inner join deleted on deleted.id = inserted.id
where inserted.CONSTITUENTID = deleted.CONSTITUENTID
and ltrim(rtrim(replace(replace(inserted.KEYNAME,'.',''),'''','')))<>''
-- Delete alias rows where keyname is now blank.
if update(KEYNAME)
delete from dbo.SEARCHCONSTITUENT
where ALIASID in(select ID
from inserted
where ltrim(rtrim(replace(replace(inserted.KEYNAME,'.',''),'''','')))='')
end
if update(ALIASTYPECODEID)
begin
delete from dbo.SEARCHCONSTITUENT
where ALIASID in(select ID from inserted where ALIASTYPECODEID not in(select ID from dbo.SEARCHCONSTITUENTALIASTYPE) or ALIASTYPECODEID is null);
insert into dbo.SEARCHCONSTITUENT (ID,CONSTITUENTID,ADDRESSID,
KEYNAME,FIRSTNAME,MIDDLENAME,NAMETYPECODE,
TITLECODEID,SUFFIXCODEID,
COUNTRYID,POSTCODE,STREETNUMBER,STREETNAME,
ISORGANIZATION,ISGROUP,ALIASID)
select newid(),
c.ID,
a.ID,
CLEANSTRINGS.ALIASKEYNAME,
CLEANSTRINGS.ALIASFIRSTNAME,
CLEANSTRINGS.ALIASMIDDLENAME,
3,
inserted.TITLECODEID,
inserted.SUFFIXCODEID,
a.COUNTRYID,
case when ltrim(rtrim(a.POSTCODE)) like '[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]' then left(ltrim(a.POSTCODE),5) else isnull(ltrim(rtrim(a.POSTCODE)),'') end,
isnull(PARSEDADDRESS.STREETNUMBER,''),
isnull(isnull(PARSEDADDRESS.STREETNAME,CLEANSTRINGS.ADDRESSBLOCK),''),
c.ISORGANIZATION,
c.ISGROUP,
inserted.ID
from inserted
inner join dbo.SEARCHCONSTITUENTALIASTYPE on SEARCHCONSTITUENTALIASTYPE.ID = inserted.ALIASTYPECODEID
inner join dbo.CONSTITUENT c on c.ID = inserted.CONSTITUENTID
left outer join dbo.ADDRESS a on a.CONSTITUENTID = c.ID
cross apply (select ltrim(rtrim(upper(replace(replace(replace(replace(replace(replace(replace(replace(
a.ADDRESSBLOCK,'.',''),'-',' '),',',' '),
char(13)+char(10),' '),char(10)+char(13),' '),char(13),' '),char(10),' '),' ',' ')))) ADDRESSBLOCK,
upper(ltrim(rtrim(replace(inserted.FIRSTNAME,'.','')))) ALIASFIRSTNAME,
upper(ltrim(rtrim(replace(inserted.MIDDLENAME,'.','')))) ALIASMIDDLENAME,
upper(ltrim(rtrim(replace(replace(inserted.KEYNAME,'.',''),'''','')))) ALIASKEYNAME,
upper(ltrim(rtrim(replace(c.FIRSTNAME,'.','')))) CONSTITUENTFIRSTNAME,
upper(ltrim(rtrim(replace(c.MIDDLENAME,'.','')))) CONSTITUENTMIDDLENAME,
upper(ltrim(rtrim(replace(replace(c.KEYNAME,'.',''),'''','')))) CONSTITUENTKEYNAME) CLEANSTRINGS
outer apply (select left(CLEANSTRINGS.ADDRESSBLOCK,charindex(' ',CLEANSTRINGS.ADDRESSBLOCK)-1) STREETNUMBER,
right(CLEANSTRINGS.ADDRESSBLOCK,len(CLEANSTRINGS.ADDRESSBLOCK)-charindex(' ',CLEANSTRINGS.ADDRESSBLOCK)) STREETNAME
where dbo.UFN_REGULAREXPRESSIONMATCH('(?:^[A-Z]?[\d-]+[A-Z]? (?:.|\n)+$)',CLEANSTRINGS.ADDRESSBLOCK) = 1
and charindex(' ',CLEANSTRINGS.ADDRESSBLOCK)<=13) PARSEDADDRESS
where CLEANSTRINGS.ALIASKEYNAME<>''
and (inserted.TITLECODEID<>isnull(c.TITLECODEID,@NULLID) or
(CLEANSTRINGS.ALIASFIRSTNAME<>CLEANSTRINGS.CONSTITUENTFIRSTNAME and CLEANSTRINGS.ALIASFIRSTNAME<>'') or
(CLEANSTRINGS.ALIASMIDDLENAME<>CLEANSTRINGS.CONSTITUENTMIDDLENAME and CLEANSTRINGS.ALIASMIDDLENAME<>'') or
CLEANSTRINGS.ALIASKEYNAME<>CLEANSTRINGS.CONSTITUENTKEYNAME or
inserted.SUFFIXCODEID<>isnull(c.SUFFIXCODEID,@NULLID))
and not exists(select 'x' from dbo.SEARCHCONSTITUENT where ALIASID = inserted.ID)
and c.ISCONSTITUENT = 1
and (c.ISINACTIVE = 0 or (c.ISINACTIVE = 1 and c.ID not in (select SOURCEID from dbo.CONSTITUENTMERGEOPERATIONS)));
end
end
end