USP_BUSINESSPROCESSSTATUS_BULKDELETE
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CHANGEAGENTID | uniqueidentifier | IN | |
@NUMBERDELETED | int | INOUT | |
@SELECTIONID | uniqueidentifier | IN | |
@DATEPART | tinyint | IN | |
@DATEINTERVAL | int | IN | |
@NUMBERTOKEEP | int | IN |
Definition
Copy
create procedure dbo.USP_BUSINESSPROCESSSTATUS_BULKDELETE
(
@CHANGEAGENTID uniqueidentifier = null,
@NUMBERDELETED integer = 0 output,
@SELECTIONID uniqueidentifier = null,
@DATEPART tinyint = 3,
@DATEINTERVAL integer = 1,
@NUMBERTOKEEP integer = 0 -- number to keep, if set to a non-zero value, trumps date parameters
)
as begin
set nocount on;
declare @CUTOFF datetime;
declare @FILTERDATE datetime;
declare @PREVIOUSFILTERDATE datetime;
declare @MAXDATE datetime;
set @NUMBERDELETED = 0;
begin try
if isnull(@NUMBERTOKEEP, 0) < 0
raiserror('BBERR_INVALIDNUMBERTOKEEP', 13, 1);
if isnull(@DATEINTERVAL, 0) < 0
raiserror('BBERR_INVALIDDATEINTERVAL', 13, 1);
if isnull(@NUMBERTOKEEP, 0) = 0
begin
select @CUTOFF = dbo.[UFN_PURGEGLOBALCHANGE_RESOLVEDATEFILTER](@DATEPART, @DATEINTERVAL, getdate());
if @CUTOFF is null
raiserror('BBERR_COULDNOTRESOLVEINTERVAL', 13, 1);
end
create table #STATUSES ([BUSINESSPROCESSSTATUSID] uniqueidentifier, [STATUSDATE] datetime);
if @SELECTIONID is null
if @NUMBERTOKEEP > 0 begin
insert into #STATUSES
select [BUSINESSPROCESSSTATUSID], [STATUSDATE] from
(select [BUSINESSPROCESSSTATUS].[ID] as [BUSINESSPROCESSSTATUSID], row_number() over(partition by BUSINESSPROCESSCATALOGID, BUSINESSPROCESSPARAMETERSETID order by [ENDEDON] desc) as [ROWNUMBER], [STARTEDON] as [STATUSDATE]
from dbo.[BUSINESSPROCESSSTATUS]
where ENDEDON is not null) [STATUS]
where [ROWNUMBER] > @NUMBERTOKEEP;
end
else begin
insert into #STATUSES
select [BUSINESSPROCESSSTATUS].[ID] as [BUSINESSPROCESSSTATUSID], [STARTEDON] as [STATUSDATE]
from dbo.[BUSINESSPROCESSSTATUS]
where [BUSINESSPROCESSSTATUS].[ENDEDON] < @CUTOFF;
end
else
if @NUMBERTOKEEP > 0 begin
insert into #STATUSES
select [BUSINESSPROCESSSTATUSID], [STATUSDATE] from
(select [BUSINESSPROCESSSTATUS].[ID] as [BUSINESSPROCESSSTATUSID], row_number() over(partition by BUSINESSPROCESSCATALOGID, BUSINESSPROCESSPARAMETERSETID order by [ENDEDON] desc) as [ROWNUMBER], [STARTEDON] as [STATUSDATE]
from dbo.[BUSINESSPROCESSSTATUS]
where ENDEDON is not null and [BUSINESSPROCESSSTATUS].[BUSINESSPROCESSCATALOGID] in
(select [ID] from dbo.[UFN_IDSETREADER_GETRESULTS_GUID](@SELECTIONID))) [STATUS]
where [ROWNUMBER] > @NUMBERTOKEEP;
end
else begin
insert into #STATUSES
select [BUSINESSPROCESSSTATUS].[ID] as [BUSINESSPROCESSSTATUSID], [STARTEDON] as [STATUSDATE]
from dbo.[BUSINESSPROCESSSTATUS]
where [BUSINESSPROCESSSTATUS].[BUSINESSPROCESSCATALOGID] in
(select [ID] from dbo.[UFN_IDSETREADER_GETRESULTS_GUID](@SELECTIONID))
and ENDEDON is not null
and [BUSINESSPROCESSSTATUS].[ENDEDON] < @CUTOFF;
end
-- Remove business processes from temp table for "Receipting Process" business process which are not allowed to delete from UI. The receipt process with Receipt date are not allowed to delete from UI
delete #STATUSES
from dbo.[REVENUERECEIPT]
inner join #STATUSES on RECEIPTINGPROCESSSTATUSID = [BUSINESSPROCESSSTATUSID] and RECEIPTDATE is not null;
select @FILTERDATE = min([STATUSDATE]), @MAXDATE = max([STATUSDATE]) from #STATUSES;
set @PREVIOUSFILTERDATE = @FILTERDATE;
while (@FILTERDATE < @MAXDATE)
begin
set @FILTERDATE = dateadd(month, 1, @FILTERDATE);
-- Update dependent table for "Invitation Process - with custom formatting rules" business process
update INVITATION
set SEGMENTATIONACTIVATEPROCESSSTATUSID = null
from dbo.[INVITATIONHISTORY] INVITATION
join #STATUSES [STATUS] on INVITATION.SEGMENTATIONACTIVATEPROCESSSTATUSID = [STATUS].BUSINESSPROCESSSTATUSID
where STATUSDATE <= @FILTERDATE and STATUSDATE >= @PREVIOUSFILTERDATE;
delete BUSINESSPROCESSSTATUS
from dbo.[BUSINESSPROCESSSTATUS]
join #STATUSES on ID = BUSINESSPROCESSSTATUSID
where STATUSDATE <= @FILTERDATE and STATUSDATE >= @PREVIOUSFILTERDATE;
set @PREVIOUSFILTERDATE = @FILTERDATE;
end
select @NUMBERDELETED = count([BUSINESSPROCESSSTATUSID]) from #STATUSES;
drop table #STATUSES;
end try
begin catch
exec dbo.[USP_RAISE_ERROR];
return 1;
end catch
return 0;
end