USP_GLOBALCHANGE_AUDITDELETE
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CHANGEAGENTID | uniqueidentifier | IN | |
@ASOF | datetime | IN | |
@NUMBERADDED | int | INOUT | |
@NUMBEREDITED | int | INOUT | |
@NUMBERDELETED | int | INOUT | |
@SELECTIONID | uniqueidentifier | IN | |
@DATEPART | tinyint | IN | |
@DATEINTERVAL | int | IN | |
@DELETEPICTURES | bit | IN |
Definition
Copy
CREATE procedure dbo.[USP_GLOBALCHANGE_AUDITDELETE]
(
@CHANGEAGENTID uniqueidentifier = null,
@ASOF as datetime = null,
@NUMBERADDED integer = 0 output,
@NUMBEREDITED integer = 0 output,
@NUMBERDELETED integer = 0 output,
@SELECTIONID uniqueidentifier = null,
@DATEPART tinyint = 3,
@DATEINTERVAL integer = 1,
@DELETEPICTURES bit = 0
)
with execute as owner
as begin
set nocount on;
declare @CUTOFF datetime;
declare @TABLENAME nvarchar(128);
declare @EXISTSSQL nvarchar(max) = null;
declare @DELETESQL nvarchar(max) = null;
declare @ROWSEXIST bit = 0;
set @NUMBERADDED = 0;
set @NUMBEREDITED = 0;
set @NUMBERDELETED = 0;
begin try
set @CUTOFF = dbo.[UFN_PURGEGLOBALCHANGE_RESOLVEDATEFILTER](@DATEPART, @DATEINTERVAL, getdate())
if @CUTOFF is null
raiserror('BBERR_COULDNOTRESOLVEINTERVAL', 13, 1);
if @DELETEPICTURES = 0
begin
if object_id('tempdb..#TABLE_STATISTICS') is not null
drop table #TABLE_STATISTICS;
create table #TABLE_STATISTICS ([TABLECATALOGID] uniqueidentifier, [ISAUDITTABLE] bit, [TABLENAME] nvarchar(128) collate database_default);
insert into #TABLE_STATISTICS
select [CATALOGID], [ISAUDITTABLE], [TABLENAME] from dbo.[UFN_TABLE_STATISTICS]();
create index [IX_TMP_TABLE_STATISTICS_TABLECATALOGID] on #TABLE_STATISTICS ([TABLECATALOGID]);
declare @AUDITTABLES table ([TABLENAME] nvarchar(128));
if @SELECTIONID is null
insert into @AUDITTABLES
select [TABLENAME] from #TABLE_STATISTICS where [ISAUDITTABLE] = 1 and [TABLENAME] like '%AUDIT'
else
insert into @AUDITTABLES
select [TABLENAME] from #TABLE_STATISTICS where [ISAUDITTABLE] = 1 and [TABLENAME] like '%AUDIT'
and [TABLECATALOGID] in (select [ID] from dbo.[UFN_IDSETREADER_GETRESULTS_GUID](@SELECTIONID));
declare AUDITTABLES cursor local fast_forward for
select [TABLENAME] from @AUDITTABLES;
open AUDITTABLES;
fetch next from AUDITTABLES into @TABLENAME;
while (@@FETCH_STATUS = 0)
begin
set @EXISTSSQL = 'select @ROWSEXIST = case when exists(select top 1 1 from dbo.[' + @TABLENAME + '] where [DATECHANGED] < @CUTOFF) then 1 else 0 end';
set @DELETESQL = 'delete from dbo.[' + @TABLENAME + '] where [DATECHANGED] < @CUTOFF';
exec sp_executesql @EXISTSSQL, N'@ROWSEXIST bit output, @CUTOFF datetime', @ROWSEXIST = @ROWSEXIST output, @CUTOFF = @CUTOFF;
while @ROWSEXIST = 1
begin
set rowcount 1000;
exec sp_executesql @DELETESQL, N'@CUTOFF datetime', @CUTOFF = @CUTOFF;
set @NUMBERDELETED = @NUMBERDELETED + @@ROWCOUNT;
set rowcount 0;
exec sp_executesql @EXISTSSQL, N'@ROWSEXIST bit output, @CUTOFF datetime', @ROWSEXIST = @ROWSEXIST output, @CUTOFF = @CUTOFF;
end
fetch next from AUDITTABLES into @TABLENAME;
end
close AUDITTABLES;
deallocate AUDITTABLES;
end
else
begin
update dbo.CONSTITUENTAUDIT set PICTURE = null, PICTURETHUMBNAIL = null where PICTURE is not null or PICTURETHUMBNAIL is not null;
set @NUMBERDELETED = @NUMBERDELETED + @@ROWCOUNT;
end
end try
begin catch
set rowcount 0;
exec dbo.[USP_RAISE_ERROR];
return 1;
end catch
return 0;
end