USP_EMAILJOB_CLEANUPAFTERCOMPLETED
Cleans up sql objects created when email jobs are sent to their processor.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@EMAILJOBS | xml | IN |
Definition
Copy
CREATE procedure dbo.USP_EMAILJOB_CLEANUPAFTERCOMPLETED
(
@EMAILJOBS xml --='<EmailJobs><ID>168</ID><ID>169</ID></EmailJobs>'
)
as
begin
-- clean up merge views from completed emails
declare @MERGEVIEWS as Table (ID uniqueidentifier, EMAILJOBID int)
insert into @MERGEVIEWS
select EJ.MERGEVIEWID MERGEVIEWID, EJ.ID from dbo.EmailJob EJ
inner join
(
select c.value('.','int') as ID
from @EMAILJOBS.nodes('/EmailJobs/ID') as T(c)
) as COMPLETED on EJ.ID = COMPLETED.ID
where EJ.MERGEVIEWID is not NULL
union
select EJ.MERGEVIEWID, EJ.ID from EmailJob EJ where EJ.STATUS=8 and EJ.MERGEVIEWID is not NULL
declare @VIEWSQL nvarchar(max) = ''
select @VIEWSQL = @VIEWSQL + 'DROP VIEW dbo.' + ISV.TABLE_NAME + '; '
from @MERGEVIEWS V
inner join dbo.SQLVIEWCATALOG VC on V.ID=VC.ID
inner join INFORMATION_SCHEMA.VIEWS ISV on ISV.TABLE_NAME = VC.VIEWNAME
if @VIEWSQL is not NULL
begin
--delete infinity view metadata
delete from dbo.SQLVIEWCATALOG where ID in (select ID from @MERGEVIEWS)
--drop views
exec(@VIEWSQL)
--clean up email job mergeview data
update dbo.EmailJob set MERGEVIEWID = NULL where ID in (select EMAILJOBID from @MERGEVIEWS)
end
--delete temporary metadata tables
declare @COMPLETEDEMAILJOBS table (EMAILJOBID int, TABLENAME sysname)
insert into @COMPLETEDEMAILJOBS (EMAILJOBID, TABLENAME)
select EJTMP.EMAILJOBID, CAST(EJTMP.TABLENAME as sysname) from dbo.EMAILJOBTEMPORARYMETATDATA EJTMP
inner join
(
select c.value('.','int') as ID
from @EMAILJOBS.nodes('/EmailJobs/ID') as T(c)
) as COMPLETED on EJTMP.EMAILJOBID = COMPLETED.ID
inner join INFORMATION_SCHEMA.TABLES IST on IST.TABLE_NAME = EJTMP.TABLENAME
union
select EJTMP.EMAILJOBID, CAST(EJTMP.TABLENAME as sysname) from dbo.EMAILJOBTEMPORARYMETATDATA EJTMP
inner join EmailJob EJ on EJTMP.EMAILJOBID=EJ.ID
where EJ.STATUS=8
declare @TABLESQL nvarchar(max) = ''
select @TABLESQL = @TABLESQL + 'DROP TABLE dbo.' + EJ.TABLENAME + '; '
from @COMPLETEDEMAILJOBS EJ
if @TABLESQL is not NULL
begin
--delete infinity table metadata
delete from TABLECATALOG where tablename in (select TABLENAME from @COMPLETEDEMAILJOBS)
exec(@TABLESQL)
--clean up processed temporary email job metadata table
delete dbo.EMAILJOBTEMPORARYMETATDATA
from dbo.EMAILJOBTEMPORARYMETATDATA T
inner join @COMPLETEDEMAILJOBS EJ on EJ.EMAILJOBID=T.EMAILJOBID
end
end