USP_CONSTITUENCYDATERANGE_REFRESHRELATIONONLYCONSTITUENCY
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONSTITUENTID | uniqueidentifier | IN | |
@CONSTITUENCYREFRESHPROCESSID | uniqueidentifier | IN | |
@RECORDCOUNT | int | INOUT |
Definition
Copy
CREATE procedure dbo.USP_CONSTITUENCYDATERANGE_REFRESHRELATIONONLYCONSTITUENCY
(
@CONSTITUENTID uniqueidentifier = null,
@CONSTITUENCYREFRESHPROCESSID uniqueidentifier = null,
@RECORDCOUNT int = 0 output
)
as
begin
set nocount on;
set @RECORDCOUNT = 0;
declare @CURRENTDATE datetime = getdate();
declare @RELATIONONLYDEFINITIONID uniqueidentifier = '8B6ECCFD-6829-4FBC-B092-58CA083F9322';
begin try
if @CONSTITUENTID is not null and @CONSTITUENCYREFRESHPROCESSID is not null
begin
raiserror('ERR_REFRESH_CONSTITUENTANDSELECTION : A constituency refresh cannot be run with both a specific constituent and a selection.', 13, 1);
end
if object_id('tempdb..#RELATIONONLYCONSTITUENTS') is not null
begin
drop table #RELATIONONLYCONSTITUENTS;
end
create table #RELATIONONLYCONSTITUENTS
(
CONSTITUENTID uniqueidentifier,
DATEFROM date
);
if @CONSTITUENCYREFRESHPROCESSID is null and @CONSTITUENTID is null
begin
with CONSTITUENCYCONSTITUENTS as
(
select distinct
CONSTITUENCYDATERANGE.CONSTITUENTID
from
dbo.CONSTITUENCYDATERANGE
where
CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID <> @RELATIONONLYDEFINITIONID
)
insert into #RELATIONONLYCONSTITUENTS
(
CONSTITUENTID,
DATEFROM
)
select
RELATIONSHIP.RELATIONSHIPCONSTITUENTID,
cast(min(RELATIONSHIP.DATEADDED) as date)
from
dbo.RELATIONSHIP
left join CONSTITUENCYCONSTITUENTS
on CONSTITUENCYCONSTITUENTS.CONSTITUENTID = RELATIONSHIP.RELATIONSHIPCONSTITUENTID
where
CONSTITUENCYCONSTITUENTS.CONSTITUENTID is null
group by
RELATIONSHIP.RELATIONSHIPCONSTITUENTID;
delete dbo.CONSTITUENCYDATERANGE
from
dbo.CONSTITUENCYDATERANGE
left join #RELATIONONLYCONSTITUENTS as RELATIONONLYCONSTITUENTS
on RELATIONONLYCONSTITUENTS.CONSTITUENTID = CONSTITUENCYDATERANGE.CONSTITUENTID
where
RELATIONONLYCONSTITUENTS.CONSTITUENTID is null
and CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @RELATIONONLYDEFINITIONID;
set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;
end
else if @CONSTITUENCYREFRESHPROCESSID is null
begin
with CONSTITUENCYCONSTITUENTS as
(
select distinct
CONSTITUENCYDATERANGE.CONSTITUENTID
from
dbo.CONSTITUENCYDATERANGE
where
CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID <> @RELATIONONLYDEFINITIONID
)
insert into #RELATIONONLYCONSTITUENTS
(
CONSTITUENTID,
DATEFROM
)
select
RELATIONSHIP.RELATIONSHIPCONSTITUENTID,
cast(min(RELATIONSHIP.DATEADDED) as date)
from
dbo.RELATIONSHIP
left join CONSTITUENCYCONSTITUENTS
on CONSTITUENCYCONSTITUENTS.CONSTITUENTID = RELATIONSHIP.RELATIONSHIPCONSTITUENTID
where
CONSTITUENCYCONSTITUENTS.CONSTITUENTID is null
and RELATIONSHIP.RELATIONSHIPCONSTITUENTID = @CONSTITUENTID
group by
RELATIONSHIP.RELATIONSHIPCONSTITUENTID;
delete dbo.CONSTITUENCYDATERANGE
from
dbo.CONSTITUENCYDATERANGE
left join #RELATIONONLYCONSTITUENTS as RELATIONONLYCONSTITUENTS
on RELATIONONLYCONSTITUENTS.CONSTITUENTID = CONSTITUENCYDATERANGE.CONSTITUENTID
where
RELATIONONLYCONSTITUENTS.CONSTITUENTID is null
and CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @RELATIONONLYDEFINITIONID
and CONSTITUENCYDATERANGE.CONSTITUENTID = @CONSTITUENTID;
set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;
end
else
begin
with CONSTITUENCYCONSTITUENTS as
(
select distinct
CONSTITUENCYDATERANGE.CONSTITUENTID
from
dbo.CONSTITUENCYDATERANGE
where
CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID <> @RELATIONONLYDEFINITIONID
)
insert into #RELATIONONLYCONSTITUENTS
(
CONSTITUENTID,
DATEFROM
)
select
RELATIONSHIP.RELATIONSHIPCONSTITUENTID,
cast(min(RELATIONSHIP.DATEADDED) as date)
from
dbo.RELATIONSHIP
left join CONSTITUENCYCONSTITUENTS
on CONSTITUENCYCONSTITUENTS.CONSTITUENTID = RELATIONSHIP.RELATIONSHIPCONSTITUENTID
inner join dbo.CONSTITUENCYREFRESHPROCESSSELECTIONRESULT CONSTITUENTS
on CONSTITUENTS.CONSTITUENTID = RELATIONSHIP.RELATIONSHIPCONSTITUENTID
and CONSTITUENTS.CONSTITUENCYREFRESHPROCESSID = @CONSTITUENCYREFRESHPROCESSID
where
CONSTITUENCYCONSTITUENTS.CONSTITUENTID is null
group by
RELATIONSHIP.RELATIONSHIPCONSTITUENTID;
delete dbo.CONSTITUENCYDATERANGE
from
dbo.CONSTITUENCYDATERANGE
left join #RELATIONONLYCONSTITUENTS as RELATIONONLYCONSTITUENTS
on RELATIONONLYCONSTITUENTS.CONSTITUENTID = CONSTITUENCYDATERANGE.CONSTITUENTID
inner join dbo.CONSTITUENCYREFRESHPROCESSSELECTIONRESULT CONSTITUENTS
on CONSTITUENTS.CONSTITUENTID = CONSTITUENCYDATERANGE.CONSTITUENTID
and CONSTITUENTS.CONSTITUENCYREFRESHPROCESSID = @CONSTITUENCYREFRESHPROCESSID
where
RELATIONONLYCONSTITUENTS.CONSTITUENTID is null
and CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @RELATIONONLYDEFINITIONID;
set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;
end
insert into dbo.CONSTITUENCYDATERANGE
(
ID,
CONSTITUENTID,
CONSTITUENCYDEFINITIONID,
DATEFROM,
REFRESHDATE
)
select
newid(),
RELATIONONLYCONSTITUENTS.CONSTITUENTID,
@RELATIONONLYDEFINITIONID,
RELATIONONLYCONSTITUENTS.DATEFROM,
@CURRENTDATE
from
#RELATIONONLYCONSTITUENTS as RELATIONONLYCONSTITUENTS
left join dbo.CONSTITUENCYDATERANGE
on CONSTITUENCYDATERANGE.CONSTITUENTID = RELATIONONLYCONSTITUENTS.CONSTITUENTID
and CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @RELATIONONLYDEFINITIONID
where
CONSTITUENCYDATERANGE.ID is null;
set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;
update dbo.CONSTITUENCYDATERANGE
set
CONSTITUENCYDATERANGE.DATEFROM = RELATIONONLYCONSTITUENTS.DATEFROM,
CONSTITUENCYDATERANGE.REFRESHDATE = @CURRENTDATE
from
dbo.CONSTITUENCYDATERANGE
inner join #RELATIONONLYCONSTITUENTS as RELATIONONLYCONSTITUENTS
on RELATIONONLYCONSTITUENTS.CONSTITUENTID = CONSTITUENCYDATERANGE.CONSTITUENTID
where
CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @RELATIONONLYDEFINITIONID;
set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;
if object_id('tempdb..#RELATIONONLYCONSTITUENTS') is not null
begin
drop table #RELATIONONLYCONSTITUENTS;
end
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;
end